• Java基础--面向对象编程4(多态)


    1.多态的概念

    多态是指程序中的同一引用类型,使用不同的实例而执行结果不同的。

    同一个类型:一般指父类

    不同的实例:不同的子类实例

    执行结果不同:针对同一方法执行的结果不同

     1 package cn.sxt05;
     2 
     3 public class Test01 {
     4     public static void main(String[] args) {
     5         
     6         // 多态
     7         // 同一引用类型
     8         Pet pet = null;
     9         // 父类引用 引用 子类对象
    10         pet = new Dog("二狗",100,0,"土狗");
    11         // 呈现多态
    12         pet.eat();
    13         
    14         pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE);
    15         // 呈现多态
    16         pet.eat();
    17     }
    18 }

    2.实现多态的步骤

    [1] 编写父类

    [2] 编写子类,子类一定要重写/实现父类的方法

    [3] 运行时,父类类型 引用 子类对象 (Pet pet = new Dog())

    3.多态的实现形式

    [1]父类类型引用子类对象(本质)

    如下代码所示,pet = new Dog() 父类类型引用子类对象,当调用eat方法时,执行的是被子类对象重写/实现的eat方法。

    1 // 多态
    2 // 同一引用类型
    3 Pet pet = null;
    4 // 父类引用 引用 子类对象
    5 pet = new Dog("二狗",100,0,"土狗");
    6 // 呈现多态
    7 pet.eat();

    [2]父类作为方法形参实现多态

    1 public void feed(Pet pet) {
    2         System.out.println(this.getName() + "正在喂" + pet.getName());
    3         pet.eat();
    4     }

    [3]父类作为方法的返回值实现多态

     1 public Pet adoptPet(int type) {
     2         Pet pet = null;
     3         if(1 == type) {
     4             pet = new Dog();
     5         }else if(2 == type) {
     6             pet = new Penguin();
     7         }else if(3 == type){
     8             pet = new Cat();
     9         }
    10         return pet;
    11     }

    4.多态类型转换

    在多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换。

    在引用数据类型转换过程中,自动类型转换也称向上类型转换,子类可以自动转换成父类。

    1 Pet pet = null;
    2 pet = new Dog();

    强制类型转换也称向下类型转换,父类可以强制转换成子类。

    子类类型 引用 = (子类)父类对象,如果要调用子类特有的方法时,一定要强制类型转换,通过instanceof鉴别具体类型。

    1 public void play(Pet pet) {
    2         if(pet instanceof Dog) {
    3             Dog dog = (Dog) pet;
    4             dog.catchFlyDisc();
    5         }else if(pet instanceof Penguin) {
    6             Penguin penguin = (Penguin) pet;
    7             penguin.swimming();
    8         }
    9     }
  • 相关阅读:
    Vue学习之监听methods、watch及computed比较小结(十一)
    Vue学习之路由vue-router传参及嵌套小结(十)
    Vue学习之路由vue-router小结(九)
    Vue学习之组件切换及父子组件小结(八)
    Vue学习之全局和私有组件小结(七)
    Vue学习之动画小结(六)
    Vue学习之vue-resource小结(五)
    Vue学习之生命周期钩子小结(四)
    Vue学习之过滤器和自定义指令小结(三)
    Vue学习之品牌案例部分代码小结(二)
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/10758960.html
Copyright © 2020-2023  润新知