多态是面向对象的重要特性,在java中表现为父类引用指向子类对象 Father f1 = new Son();
多态是方法的多态,与属性无关
父类与子类之间需要有联系,否则类型转换异常,即ClassCastException
多态的存在条件是两个类之间有继承关系,方法重写时
有几个方法无法被重写:1,static 方法,属于类,它不属于实例
2,final 常量
3,private方法
package Demo6;public class Application {public static void main(String[] args) {//一个对象的实际类型是确定的//如下方的Student s1//可以指向的引用类型就不确定了:父类的引用指向子类//Student里的方法包含自己本身有的,从父类继承来的Student s1 = new Student();//可以指向子类,但无法调用子类独有的方法Person s2 = new Student();Object s3 = new Student();//对象能执行那些方法取决于左边里是否包含,与右边关系不大//左边,即引用类型决定了有无权限取调用这个方法//右边,即实际对象类型决定了调用方法是执行哪一种版本,是原始的,还是子类重写过的s1.run();//子类重写父类的方法,此时执行了子类的方法s2.run();s1.eat();((Student) s2).run();//强制转换,依旧遵循高转低将Person转换为Student,方便其调用Student中独有的方法}
}
package Demo6;public class Person {public void run(){System.out.println("四分配");}
}
package Demo6;public class Student extends Person {@Overridepublic void run() {System.out.println("直面失败");}public void eat(){System.out.println("及时行乐");}
}