• Java学习之多态


    多态:一个事物有多种描述(如一个人(A)的爸爸是B爷爷是C,那我们描述A的话,可以通过直接描述A,也可以描述B的儿子,也可以描述C的孙子)

    代码体现:父类或接口的引用指向子类对象

     1 class 动物
     2 {
     3     ... ...
     4 }
     5 class 猫 extends 动物
     6 {
     7     ... ...
     8 }
     9 class 狗 extends 动物
    10 {
    11     ... ...
    12 }
    13 
    14 动物 X=new 猫();

    多态的应用:

     1 abstract class Animal
     2 {
     3     abstract void eat();
     4 }
     5 
     6 class Cat extends Animal
     7 {
     8     void eat()
     9     {
    10         System.out.println("猫吃鱼");
    11     }
    12     void catchMouse()
    13     {
    14         System.out.println("猫抓老鼠");
    15     }
    16 }
    17 
    18 class Dog extends Animal
    19 {
    20     void eat()
    21     {
    22         System.out.println("狗啃骨头");
    23     }
    24     
    25     void lookHome()
    26     {
    27         System.out.println("狗看家");
    28     }
    29 }
    30 
    31 class DuoTaiDemo
    32 {
    33     public static void main(String[] args)
    34     {
    35         Cat c=new Cat();
    36         Dog d=new Dog();
    37         method(c);
    38         method(d);
    39     }
    40     
    41     void method(Cat c)
    42     {
    43         c.eat();
    44     }
    45     void method(Dog d)
    46     {
    47         d.eat();
    48     }
    50 }

    发现:

    1、void method(Cat c)代码几乎一样

    2、如果以后需求要增加动物(如:猪)是不是还要再写一个关于猪的method方法呢

    通过多态修改代码:

     1 //增加猪
     2 class Pig extends Animal
     3 {
     4     void eat()
     5     {
     6         System.out.println("猪吃饲料");
     7     }
     8     void gongDi()
     9     {
    10         System.out.println("猪拱地");
    11     }
    12 }
    13 
    14 class DuoTaiDemo
    15 {
    16     public static void main(String[] args)
    17     {
    18         Cat c=new Cat();
    19         Dog d=new Dog();
    20         method(c);
    21         method(d);
    22         //提高代码的扩展性
    23         method(new Pig());
    24     }
    25     
    26     /*28     void method(Cat c)
    29     {
    30         c.eat();
    31     }
    32     void method(Dog d)
    33     {
    34         d.eat();
    35     }
    36     */
    37     void method(Animal a)
    38     {
    39         a.eat();
    40     }
    41 }

    多态的好处:

    1、简化代码

    2、提高代码的扩展性

    这样的代码有好处就有弊端如果想使用Cat类的catchMouse方法的话

    代码如下

     1 class DuoTaiDemo
     2 {
     3     public static void main(String[] args)
     4     {
     5         Animal a=new Cat();
     6         a.eat();
     7         //a.catchMouse();//这个就是弊端,Animal中不具备catchMouse
     8         /*
     9         instanceof作用:判断对象类型 
    10         方式:
    11             变量 instanceof 类或接口
    12         使用前提:强制转换
    13         */
    14         if(a instanceof Cat)
    15         {
    16             ((Cat)a).catchMouse();
    17         }
    18     }
    19 }

    总结:

    一、多态的好处:
       简化代码
       提高代码的扩展性
    二、多态的弊端:
       无法使用子类特有内容
    三、多态的前提:
       必须有关系(继承、实现)

  • 相关阅读:
    关于敏捷开发方法读后感
    【软件工程结对编程】电梯调度
    最大连续子数组问题2-homework-02
    软件工程个人项目--Word frequency program
    最大连续子数组问题-homework-01
    wangEditor 3 富文本编辑使用-
    docker启动方法,自己备注
    VS2019当前不会命中断点unbound breakpoint
    前端框架记录。
    VS2019打开项目加载失败:无法找到 .NET Core SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配。
  • 原文地址:https://www.cnblogs.com/WarBlog/p/12060156.html
Copyright © 2020-2023  润新知