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_example\lesson6>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的是谁,就调用谁的方法。

多态的特点:

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

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

转载于:https://www.cnblogs.com/tiantianxiangshang33/p/4953724.html

Java基础_学习笔记_13_类的多态性(二)相关推荐

  1. Java基础篇 学习笔记

    List item Java基础篇 学习笔记 java基础篇 第1章 计算机.程序和java概述 学习笔记 1.1什么是计算机 简单来说:计算机就是 ' 存储 ' 和 ' 处理 ' 数据的电子设备. ...

  2. Java基础知识学习笔记总结

    Java学习笔记总结 java基础复习 1. 抽象类可以有构造器,可以有一个非抽象的父类 2. 垃圾回收机制回收的是堆里面的内存,栈里面的数据自动入栈自动出栈 3. 引用类型的数据在堆当中,内存中操作 ...

  3. 狂神说java java基础篇 学习笔记

    java基础的视频内容笔记都在这了 前言等字数非常长的章节,使用了AI语音识别成文字后修改的,有错漏欢迎提出 面对对象模块的按照自己的理解进行了内容修改,可以对比原视频内容理解,如有建议欢迎提出 前言 ...

  4. Java基础提高学习笔记2

    Java基础加强笔记 11.Integer i1 = 13; Integer i1 = 13; 这两个是同一个对象 但赋值的值超过-128~127 就不是同一个对象 享元模式 flyweight 当这 ...

  5. Java基础提高学习笔记1

    Java基础加强笔记 03.开发时有两个阶段,编译时阶段 运行时阶段 工作间可以保存不同用户的不同配置 创建工作间需要关闭现有的工作间,并新建配置 每个类都有包.包要以公司的网址倒置加模块等等 int ...

  6. Java基础入门--学习笔记

    Java基础入门教程 itheima–java基础小白教程 学习配套软件:eclipse 1.基础知识 (1)常用DOS命令:切换盘–>E:,cd–>进入文件,可多级,cd - --> ...

  7. Java基础班学习笔记(8)

    1:如何制作帮助文档(了解) (1)写一个类 (2)加入文档注释 (3)通过javadoc工具生成即可 javadoc -d 目录 -author -version ArrayTool.java 如何 ...

  8. 【Java基础】学习笔记

    常见的java结构形式汇总 1.Hello,World!(基本形式) //类框架 public class Test{ //程序入口,主方法 这里的args代表的是一个变量名,可变.public st ...

  9. 如何快速打好java基础_学习Java课程时如何才能打好基础呢?

    对于初学Java的人来说,打好基础并形成编程思维非常重要.从Java语言自身来看,主要的学习难点集中在基础部分,只有学好了基础才能向更高阶层进阶,那么零基础学员在学习Java课程时如何才能打好基础呢? ...

最新文章

  1. html5 桌面定时提醒,H5界面实现桌面推送通知
  2. 基于新唐M0的XXTEA加密解密算法源码
  3. 二叉树(遍历、建立、深度)
  4. cve 爬虫_好用的Google漏洞爬虫:Google Mass Explorer
  5. 深度学习与TensorFlow:VGG论文复现
  6. python 定义类 学习2
  7. [转] Sublime Text3 配置 NodeJs 环境
  8. 批量修改同一目录下文件名--操作so easy
  9. rpm apache2 啟動vhost .htaccess讀取問題
  10. 周围剃光头顶留长发型_?22岁亿万富翁凯莉登杂志,顶着5斤“鸟窝头”凹造型,绝代艳后...
  11. 4.nslookup
  12. atitit.attilax的软件 架构 理念.docx
  13. Oracle Ravello的学习资料
  14. c语言定义数组uint,c - 将uint8_t数组转换为C中的uint16_t值 - 堆栈内存溢出
  15. Bazel入门:编译C++项目
  16. win10系统如何删除不用的输入法
  17. 解析 Github 的默认头像
  18. python求周长_作业-python面向对象编程-计算周长和面积
  19. 用VBA实现对一维数组的排序(7)堆排序
  20. 面试题:查询字符串中出现次数最多的字符以及出现次数

热门文章

  1. C++ 与 php 的交互 之----- C++ 异步获取 网页文字内容,异步获取 php 的 echo 值。...
  2. linux x64下安装oracle 11g
  3. .Net 中的反射(反射特性) - Part.3 - (转载)
  4. 3G时代 一起走近无线运维的3A标准——柳州市劳动和社会保障局
  5. C#中的DES加解密方法
  6. python 日志输出变量_python中记录打印的log模块logging的用法实例
  7. scrum回顾_133. 你最重要:2020版Scrum指南解读
  8. mysql漏洞扫描工具_Rad爬虫结合W13Scan扫描器挖掘漏洞
  9. 可变悬挂调节软硬_国六最亲民的豪车,丐版2.0T纯进口,全系可变悬架+8气囊,才23万...
  10. cpython vm_【协程原理】 - cPython的VM真变态