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_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_类的多态性(二)相关推荐
- Java基础篇 学习笔记
List item Java基础篇 学习笔记 java基础篇 第1章 计算机.程序和java概述 学习笔记 1.1什么是计算机 简单来说:计算机就是 ' 存储 ' 和 ' 处理 ' 数据的电子设备. ...
- Java基础知识学习笔记总结
Java学习笔记总结 java基础复习 1. 抽象类可以有构造器,可以有一个非抽象的父类 2. 垃圾回收机制回收的是堆里面的内存,栈里面的数据自动入栈自动出栈 3. 引用类型的数据在堆当中,内存中操作 ...
- 狂神说java java基础篇 学习笔记
java基础的视频内容笔记都在这了 前言等字数非常长的章节,使用了AI语音识别成文字后修改的,有错漏欢迎提出 面对对象模块的按照自己的理解进行了内容修改,可以对比原视频内容理解,如有建议欢迎提出 前言 ...
- Java基础提高学习笔记2
Java基础加强笔记 11.Integer i1 = 13; Integer i1 = 13; 这两个是同一个对象 但赋值的值超过-128~127 就不是同一个对象 享元模式 flyweight 当这 ...
- Java基础提高学习笔记1
Java基础加强笔记 03.开发时有两个阶段,编译时阶段 运行时阶段 工作间可以保存不同用户的不同配置 创建工作间需要关闭现有的工作间,并新建配置 每个类都有包.包要以公司的网址倒置加模块等等 int ...
- Java基础入门--学习笔记
Java基础入门教程 itheima–java基础小白教程 学习配套软件:eclipse 1.基础知识 (1)常用DOS命令:切换盘–>E:,cd–>进入文件,可多级,cd - --> ...
- Java基础班学习笔记(8)
1:如何制作帮助文档(了解) (1)写一个类 (2)加入文档注释 (3)通过javadoc工具生成即可 javadoc -d 目录 -author -version ArrayTool.java 如何 ...
- 【Java基础】学习笔记
常见的java结构形式汇总 1.Hello,World!(基本形式) //类框架 public class Test{ //程序入口,主方法 这里的args代表的是一个变量名,可变.public st ...
- 如何快速打好java基础_学习Java课程时如何才能打好基础呢?
对于初学Java的人来说,打好基础并形成编程思维非常重要.从Java语言自身来看,主要的学习难点集中在基础部分,只有学好了基础才能向更高阶层进阶,那么零基础学员在学习Java课程时如何才能打好基础呢? ...
最新文章
- html5 桌面定时提醒,H5界面实现桌面推送通知
- 基于新唐M0的XXTEA加密解密算法源码
- 二叉树(遍历、建立、深度)
- cve 爬虫_好用的Google漏洞爬虫:Google Mass Explorer
- 深度学习与TensorFlow:VGG论文复现
- python 定义类 学习2
- [转] Sublime Text3 配置 NodeJs 环境
- 批量修改同一目录下文件名--操作so easy
- rpm apache2 啟動vhost .htaccess讀取問題
- 周围剃光头顶留长发型_?22岁亿万富翁凯莉登杂志,顶着5斤“鸟窝头”凹造型,绝代艳后...
- 4.nslookup
- atitit.attilax的软件 架构 理念.docx
- Oracle Ravello的学习资料
- c语言定义数组uint,c - 将uint8_t数组转换为C中的uint16_t值 - 堆栈内存溢出
- Bazel入门:编译C++项目
- win10系统如何删除不用的输入法
- 解析 Github 的默认头像
- python求周长_作业-python面向对象编程-计算周长和面积
- 用VBA实现对一维数组的排序(7)堆排序
- 面试题:查询字符串中出现次数最多的字符以及出现次数
热门文章
- C++ 与 php 的交互 之----- C++ 异步获取 网页文字内容,异步获取 php 的 echo 值。...
- linux x64下安装oracle 11g
- .Net 中的反射(反射特性) - Part.3 - (转载)
- 3G时代 一起走近无线运维的3A标准——柳州市劳动和社会保障局
- C#中的DES加解密方法
- python 日志输出变量_python中记录打印的log模块logging的用法实例
- scrum回顾_133. 你最重要:2020版Scrum指南解读
- mysql漏洞扫描工具_Rad爬虫结合W13Scan扫描器挖掘漏洞
- 可变悬挂调节软硬_国六最亲民的豪车,丐版2.0T纯进口,全系可变悬架+8气囊,才23万...
- cpython vm_【协程原理】 - cPython的VM真变态