6.5 多态
多态即同一方法根据发送对象的不同而采用多种不同的行为方式,一个对象的实际类型时确定的,但是可以指向的引用类型就有很多。
直接上代码解释:
public class App {//app
public static void main(String[] args) {
Dog dog1 = new Dog();
Pet dog2 = new Dog();
Object dog3 = new Dog();
}
}
可以看出,对象的实际类型是确定的,但其引用类型是不确定的。
但只能是父类的引用(即类型)指向子类,父类不能调用子类的独有的方法,换种说法,左边的引用是查看能使用哪些方法,右边则是同名方法的方法体。
当然,可以使用强制转换==,将父类直接转换成子类。
注意几点:
- 必须要有继承关系才能重写。
- 注意是父类引用指向子类对象。
- 多态是方法的多态,属性没有多态。
还有一个关键词:instanceof,其是查看当前对象是否和某一类有关系。
public class App {//app
public static void main(String[] args) {
Object dog = new Dog();
System.out.println(dog instanceof Dog);//true
System.out.println(dog instanceof Pet);//true
System.out.println(dog instanceof Object);//true
System.out.println(dog instanceof String);//false
}
}
可以看出,只有在一条关系树上的才能输出true。
对象的类型转换:
public class App {//app
public static void main(String[] args) {
Object dog = new Dog();
((Dog)dog).run()
}
}
注意几点:
- 子类转换为父类,向上转型,可能会丢失方法。
- 父类转换为子类是强制转换,向下转型,丢失精度。
- 转换类型可以方便调用方法,减少代码量。