1、多态性是面向对象中的第三大主要特征,多态性是在继承性的基础之上扩展出来的概念。
2、在Java中多态性的两种实现模式:
方法的多态性:方法的重载,方法的覆写
对象的多态性:父子实例之间的转换处理,两种模式:(对象转型的处理属于多态性,这一特性必须在继承性的基础上实现)
|-对象向上转型:父类 父类实例 = 子类实例,自动完成转换(使用较多)
|-对象向下转型:子类 子类实例 = (子类)父类实例,强制完成转换(在使用子类特殊功能时使用)
6、实例之间的转换处理举例:
①
class Father {
public void print() {
System.out.println("父类");
}
}
class Son extends Father {
public void print() {
System.out.println("子类");
}
}
public class ZhuanXing {
public static void main(String[] args) {
Son son = new Son();
son.print(); //输出结果:子类
}
}
②向上转型(目的:对参数进行统一设计)
Father father = new Son(); //向上转型
father.print(); //输出结果:子类
用处:
public class ZhuanXing {
public static void main(String[] args) {
fun(new Son()); //相当于Father father = new Son();
}
public static void fun(Father father) { // 此时不管传递的是哪一个子类都能接收
father.print();
}
}
所以,使用向上转型的优点在于可以对参数进行统一设计。减少使用重载方法(给fun()函数多种参数)的代码量
③向下转型(使用子类的特殊功能)
Person per = new SuperMan() ; //向上转型(正常状态下超人也是普通人)
SuperMan man = (SuperMan)per ; //向下转型
man.fly();
man.fire();
向下转型不安全,因为在发生对象的向下转型之前一定要先进行向上转型,否则会出现“ClassCastException”异常。
7、instanceof关键字
为了保证向下转型的正确性,需判断某个实例是否是某个类的对象,此时,使用instanceof语法实现:
对象 instanceof 类
Person per = new Person();
System.out.println(per instanceof Person);
返回true则指该实例是指定类对象。
应用:为保证向下转型的安全性,在向下转型之前先判断是否进行了向上转型:
Person per = new SupperMan() ;
if(per instanceof SuperMan) {
SuperMan man = (SuperMan)per ; //向下转型
man.fly();
man.fire();
}