zoukankan      html  css  js  c++  java
  • 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 }

    总结:

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

  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/WarBlog/p/12060156.html
Copyright © 2011-2022 走看看