• Java基础_学习笔记_13_类的多态性(二)


     1 class Animal
     2 {
     3     private String name;
     4     Animal(String name)
     5     {
     6         this.name=name;
     7     }
     8     public void enjoy()
     9     {
    10         System.out.println("叫声。。。");
    11     }
    12 }
    13 class Cat extends Animal
    14 {
    15     private String eyeColor;
    16     Cat(String n,String eyeColor)
    17     {
    18         super(n);
    19         this.eyeColor=eyeColor;
    20     }
    21     public void enjoy()
    22     {
    23         System.out.println("猫叫声。。。");
    24     }
    25 }
    26 class Dog extends Animal
    27 {
    28     private String furColor;
    29     Dog(String n,String furColor)
    30     {
    31         super(n);
    32         this.furColor=furColor;
    33     }
    34     public void enjoy()
    35     {
    36         System.out.println("狗叫声。。。");
    37     }
    38 }
    39 /*
    40 class Bird extends Animal
    41 {
    42     Bird()
    43     {
    44         super("bird");
    45     }
    46     public void enjoy()
    47     {
    48         System.out.println("鸟叫声。。。");
    49     }
    50 }*/
    51 class Lady
    52 {
    53     private String name;
    54     private Animal Pet;
    55     Lady(String name,Animal Pet)
    56     {
    57         this.name=name;
    58         this.Pet=Pet;
    59     }
    60     public void petEnjoy()
    61     {
    62         Pet.enjoy();
    63     }
    64 }
    65 class Test
    66 {
    67     public static void main(String [] args)
    68     {
    69         Cat c=new Cat("catname","blue");
    70         Dog d=new Dog("dogname","black");
    71         //Bird b=new Bird();
    72         Lady L1=new Lady("L1",c);
    73         Lady L2=new Lady("L2",d);
    74         //Lady L3=new Lady("L3",b);
    75         L1.petEnjoy();
    76         L2.petEnjoy();
    77         //L3.petEnjoy();
    78     }
    79 }
    80 /*
    81 F:java_examplelesson6>java Test
    82 猫叫声。。。
    83 狗叫声。。。
    84 */

    类的多态性,也叫动态绑定。它是指代码在执行期间(也就是编译之后,进行运行操作)判断所引用对象的实际类型,根据其实际的类型调用相应的方法。

    对应上述代码我们可以看到,L1对应的c是Cat的对象,而Lady中c是Animal的引用句柄,如果根据引用类型那就要调用Animal的enjoy(),若按照实际类型,应该调用Cat的enjoy(),动态绑定这种机制就是指实际当中用的是什么类型就调用谁的enjoy()方法,实际中new的是Cat,所以调用Cat的enjoy()。之前是有一个指针指向了Animal的enjoy(),但一旦运行起来,指针就指向了Cat的enjoy()方法。所以只有在运行期间,new了之后,我才知道到底是调用哪个方法,这就是动态绑定的机制。简言之,方法被重写了,实际当中new的是谁,就调用谁的方法。

    多态的特点:

    可扩展性(就像上述代码中写到一样,如果我现在要加上鸟叫,那我只需要增加类,将代码中的注释去掉,不用过多修改程序)

    多态的实现三个必备条件:继承;重写方法;父类引用指向子类对象

  • 相关阅读:
    Condition Variables
    Cocos2d-x执行时错误:Cocos2d: Get data from file(xxx.xxx) failed!
    HDU
    Android context空指针异常
    linux c server and client 简单的通信
    UVM:8.4.3 用factory 机制创建实例的接口
    5.4 桥接模式(4.2)
    rac安装_grid安装校验报错之grid未建立信任关系
    git 使用ss5代理
    convmv 解决GBK 迁移到 UTF-8 ,中文 文件名乱码
  • 原文地址:https://www.cnblogs.com/tiantianxiangshang33/p/4953724.html
Copyright © 2020-2023  润新知