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.然后再执行当前子类的构造方法

 

posted @ 2020-06-12 22:43  多测师_树哥  阅读(176)  评论(0编辑  收藏  举报