• 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.然后再执行当前子类的构造方法
  • 相关阅读:
    ACM/ICPC 之 中国剩余定理+容斥原理(HDU5768)
    ACM/ICPC 之 三维计算几何+暴力枚举+判重(HDU5839)
    ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)
    ACM/ICPC 之 Dinic+枚举最小割点集(可做模板)(POJ1815)
    ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)
    ACM/ICPC 之 DFS+SPFA-贪心+最短路(POJ2679)
    ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)
    maven的setting.xml配置文件详解(中文)
    高性能、高可用的分布式架构体系(有启发的)
    各种数据库再spring中的配置(转载)
  • 原文地址:https://www.cnblogs.com/xiaoshubass/p/13110959.html
Copyright © 2020-2023  润新知