多态
一个对象的实际类型是确定的
可以指向的引用类型是不确定的
-
即:父类的引用指向子类
例如:因为 public class Student extends School{} 有父类(School)与子类(Student),所以父类的引用也可以指向子类来进行
// 测试: Student s1 = new Student(); // 子类的引用指向子类 School s2 = new Student(); //父类的引用指向子类 s1.run();// 可以调用 s2.run();// 因为子类里面含有父类,所以也可以调用 s1.eat();// 可以调用,因为方法是在Student里面写的 s2.eat();// 无法调用,会报错,因为这里是写在子类的方法,而上面s2声明的是父类,因此无法使用 // 能执行哪些程序,要看左边的类型,例如Student是School的子类,则Student可以调用父类的方法,但是反过来父类无法使用子类的方法
// 父类 public class School{ public void run(){ System.out.println("run"); } }
// 子类 public class Student extands School{ @Override public void run(){ System.out.println("run"); ------------------------------------- public void eat(){ System.out.println("eat"); } } }
多态的注意事项
定义
同一方法可以根据发送对象的不同而采用多种不同的行为方式
-
多态是方法的多态,属性没有多态
-
父类和子类有联系,类型转换异常(ClassCastException!)
-
存在条件:继承关系,方法需要重写父类引用指向子类对象
不能重写的方法:
-
static 方法,属于类,它不属于实例
-
final 属于常量
-
private 方法,属于私有的