多态:即同一方法可以根据发送对象的不同而采用多种不同的行为方式,一个对象的实际类型是确定的,但可以指向对象的引用类型有很多。
Person person = new Student();
父类引用指向(这里的指向可以理解为调用,个人理解)子类,也就是“向上转型”。
向上转型就是子类转换为父类,通俗点讲就是父类调用一下子类的方法,这么做的意义就是子类中的方法比父类中的方法更全面更好,父类借用一下。父类可以调用子类中继承父类的方法还有重写父类的方法,但是一定注意不能调用父类中没有定义的方法。
动态链接:当父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用; 对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。
向下转型就是子类转换为父类,需要强制转换,注意可能会丢失一些方法。
多态存在的特点:
1.有继承关系
2.子类重写父类的方法
3.父类引用指向子类对象
注意:
1.多态是方法的多态,属性不存在多态
2.类型转换异常(ClassCastException)
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//但是可以指向的引用类型就是不确定的了:父类的引用指向子类
//子类可以调用自己的或者父类的方法
Student s1 = new Student();
//父类不能调用子类中存在,但是父类中没有的方法
Person s2 = new Student();
Object s3 = new Student();
s1.test();
s2.test();//子类重写了父类的方法就会调用子类的方法
/*
* s2.eat(); 父类不能引用子类中存在但是父类没有的方法
* */
}
}
public class Student extends Person{
@Override
public void test() {
System.out.println("AAA");
}
public void eat(){
System.out.println("eat");
}
}
public class Person {
public void test(){
System.out.println("run");
}
}