多态讲解
代码
package com.zhan.base05Oop.base05Oop03;
public class Test12 {
// 多态
/*
多态的注意事项:
1. 多态是方法的多态,属性没有多态
2. 父类和子类要有联系,不然类型转换异常:ClassCastException!
3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象 Person s2=new Student();
*/
public static void main(String[] args) {
// 一个对象的实际类型是确定的
Student s1=new Student(); // 学生对象s1 就是学生
// 一个对象的可以指向的引用类型是不确定的,父类的引用指向子类
Person s2=new Student(); // 学生对象s2 不仅是学生,同时也是一个人
Object s3=new Student(); // 学生对象s2 不仅是学生,同时也是一个事物
s2.printName(); // Student 子类重写(非静态非私有非常量)了父类的方法,执行子类的;没有重写的话直接继承父类的,那么将会执行父类的方法
// 根据实际情况不同进行不同的执行,这就是多态
// 当子类没有重写父类的方法时,s2.printName();执行父类的方法输出Person
// 对象能执行哪些方法主要看对象左边的类型(是 Person 还是 Student 或者 Object),与右边关系不大
// s2.eat(); 会报错 // 父类的不能直接调用子类的方法,会报错,但可以通过转换类型操作(就像8大基本类型数据的转换一样)
((Student) s2).eat(); // 高转底 ,强制转换 高低指的是容量,子类是父类的extends(拓展,自然是高容量类型)
// Student类, 子类型,能调用的都是自己的或者继承父类的
// 儿子可以是自己的性格(方法),也可以继承父亲的性格(方法),但是父亲只能是父亲的性格
// Person类, 父类型,只能调用自己的,不能调用子类的
}
}
class Person{
public void printName(){
System.out.println("Person");
}
}
class Student extends Person{ // 学生也是人,可以继承人的特性
@Override
public void printName() {
System.out.println("Student");
}
public void eat(){ // 这是父类没有的方法
System.out.println("eat");
}
}
标签:s2,12,子类,多态,Person,Student,讲解,父类
From: https://www.cnblogs.com/zhanjianhai/p/17106744.html