多态
对象的多种形态
表现形式 Fu f=new zi();
前提: 有继承或者实现的关系
有父类引用指向子类对象
有方法重写
好处: 使用父类类型作为参数,可以接受所有子类对象,体现多态的扩展性和便利
特点:
变量调用: 编译看左边,运行也看左边
就是编译的时候会看左边的父类中有没有这个变量,如果没有,就编译失败
运行的时候,实际获取的时左边的父类的变量
方法调用: 编译看左边,运行看右边
编译的时候还是看左边的父类中有没有这个方法,如果没有就编译失败
运行的时候,实际获取的是右边子类的方法
因为编译的时候,会加载测试类,父类,和子类的class文件,
这样就会将父类的虚方法覆盖了
多态的优势和弊端
右边对象可以实现解耦合,便于扩展和维护
定义方法时使用父类作为参数,那么就可以接受所有的子类对象,体现多态的扩展性和便利
但是多态不能调用子类的特有方法,
如果一定想要使用,那就要将创建的父类进行强制转换,再转换为子类才可以调用
Fu f=new Zi();
Zi z=(Zi)f;
转换的时候,不能随便转,转成其他类类型会报错
有一个instanceof的关键字,可以用来判断
如 a instanceof Dog 判断对象a是不是狗类的多态,是就返回true