多态(java)优点以及缺点
面向对象三大特点:分装性,继承性,多态性。extends继承或者implements接口的实现,是多态性的前提。
一个对象既是子类又是父类,拥有多种形态 对象的多态性。
多态的定义格式
格式:(左侧父类的引用,指向了右侧子类的对象) 父类名称 对象名=new 子类名称();Fu 对象名称 =new Zi(); 接口名称 对象名称 =new 实现类名称();
多态中成员变量的使用特点
成员变量不能覆盖重写 访问成员变量的两种形式: 1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找,反正不可能往下找,没有最高(extends Object)就是最高。 2.间接通过成员变量方法访问成员变量:通过方法。看该方法属于谁就优先用谁,没有则向上找。
成员方法的使用特点
看右边new的是谁,就优先用谁,没有则向上找。
Fu obj =new Zi(); obj.method();//父子都有,优先用子 obj.methodFu();//子类没有,父类有,向上找到父类
口诀:编译看左边,运行看右边。 例如错误写法obj.methodZi(); //左边是父,Fu当中没有methodZi方法,左移编译器报错。 对比一下 成员变量:编译看左边,运行看左边。 成员方法:编译看左边,运行看右边。
使用多态的缺点
一旦使用了多态,成员变量只能用父类的了,成员方法只能用父类里面有的,优先用子类里面重写父类的成员方法,如果子类没有重写父类的成员方法,就向上找父类的自己的成员方法。但是不能用子类里面特有的方法以及其它内容。
使用多态的好处
为什么要用父类。和接口? 如果不用多态,只用子类,那么写法是:
Teachar one=new Teacher(); one.work(); Assistant two=new Assistant(); two.work();
老板现在唯一要做的事情,就是调用work方法,其他的功能不关心。 如果使用多态的写法,对比一下:
Employee one=new Teacher(); one.work(); Employee two=new Assistant(); two.work();
好处:无论右边new的时候换成哪个子类对象,等号左边调用方法都不会变化。
