Java知识26 多态 (重点巩固)【多测师】
一、多态 多态就是同一个行为有多个不同表现形式和形态的能力 比如: flash界面按F1按键弹出是AS 3帮助文档 在Word下弹就是Word帮助 二、多态存在的三个必要条件 继承、重写、父类引用指向子类对象 Parent p = new Child(); 三、使用多态调用方法时,先检查父类中是否有该方法,没有则编译错误,有 再去调用子类的同名方法 实例如下: abstract class Animal { //定义了一个抽象类 abstract void eat(); //定义一个抽象方法 } class Cat extends Animal { //子类Cat继承父类Animal public void eat() { //定义吃的方法 System.out.println("吃鱼"); } public void work() { System.out.println("抓老鼠"); } } class Dog extends Animal { //子类Dog继承父类Animal类 public void eat() { System.out.println("吃骨头"); } public void work() { System.out.println("看家"); } } 方法调用如下: public class Test { public static void main(String[] args) { show(new Cat()); // 以 Cat 对象调用 show 方法、new一个对象,然后直接调用这个对象的show()方法。 show(new Dog()); // 以 Dog 对象调用 show 方法 Animal a = new Cat(); // 向上转型 a.eat(); // 调用的是 Cat 的 eat Cat c = (Cat) a; // 向下转型 c.work(); // 调用的是 Cat 的 work } public static void show(Animal a) { a.eat(); // 类型判断 if (a instanceof Cat) { // 猫做的事情 Cat c = (Cat) a; c.work(); } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog) a; c.work(); } } } 四、虚方法 方法的重新:子类能够重新父类的方法 子类对象调用重新的方法 调用的是子类的方法 而不是父类中被重写的方法 要想调用父类中被重写的方法 则必须使用关键字super 如下:实例化了俩个对象:一个使用Salary引用s,另一个使用Employee引用e. Salary s = new Salary("员工 A", "北京", 3, 3600.00); Employee e = new Salary("员工 B", "上海", 2, 2400.00); 五、多态的实现方式 方式一:重写(详情Java知识25 重写和重载) 方式二:生活中接口最具代表性的就是插座 方式三:抽象类和抽象方法 六、多态总结 1.使用父类类型的引用指向子类的对象 2.该引用只能调用父类中定义的方法和变量 3.子类重写父类的方法,调用这个方法的时候,会调用子类中的这个方法(动态连接、动态调用) 4.变量不能被重写,重写的概念只针对方法 重写了变量编译会直接报错,类的属性变量是可以重写的。 七、构造子类对象时的构造方法的调用顺序 1.先调用超类的构造方法,多重超类首先调用最远超类的方法 2.然后再执行当前子类的构造方法