JAVA笔记9-多态(动态绑定、池绑定)
2024-09-04 02:54:27
1、动态绑定:执行期间(而非编译期间)判断所引用对象的实际类型,根据实际的类型调用相应方法。
2、多态存在的三个必要条件(同时):继承、重写、父类引用指向子类对象。
这三个条件满足后,当调用父类中被重写的方法时,实际new的是哪个子类对象,就调用该子类的方法。
例子:
public class TestAnimal{
public static void main(String args[]){
Dog d=new Dog("dogname","black");
Cat c=new Cat("catname","blue");
Lady l1=new Lady("l1",c);
Lady l2=new Lady("l2",d);
l1.myPetEnjoy();//猫叫声。。。
l2.myPetEnjoy();//狗叫声。。。
}
} class Lady{
String name;
Animal pet;
Lady(String name,Animal pet){
this.name=name;
this.pet=pet;
}
void myPetEnjoy(){
pet.enjoy();
}
} class Animal{
public String name;
Animal(String name){
this.name=name;
}
void enjoy(){
System.out.println("叫声。。。");
}
} class Dog extends Animal{
public String furColor;
Dog(String name,String furColor){
super(name);
this.furColor=furColor;
}
void enjoy(){
System.out.println("狗叫声。。。");
}
} class Cat extends Animal{
public String eyesColor;
Cat(String name,String eyesColor){
super(name);
this.eyesColor=eyesColor;
}
void enjoy(){
System.out.println("猫叫声。。。");
}
}
显然,Animal类型的引用pet指向Cat类型的对象,这时不能访问eyesColor。但对于方法的调用,是根据实际对象的类型,这是动态实现的。(指向方法的指针是动态指向的)这样可扩展性达到最佳。(相关题目见本博客【转】深入理解Java多态性)一个主意的应用就是在游戏设计中,基类有drawMyself()方法,子类均从中继承并重写该方法,方便扩展。
内存分析:
最新文章
- linq join的lambda写法
- 89C51单片机实现的流水灯
- 插件介绍 :cropper是一款使用简单且功能强大的图片剪裁jQuery插件。
- js判断输入是否为空,获得输入的类型
- C语言初学 俩数相除问题
- C# for循环①护栏长度 ②广场砖面积 ③判断闰年平年
- Photon的使用
- CDI services--Event(事件)
- build/temp.linux-x86_64-2.7/_openssl.c:493:30: fatal error: openssl/opensslv.h: No such file or directory
- OI生涯回忆录 2018.11.12~2019.4.15
- 基于 Python 和 Pandas 的数据分析(5) --- Concatenating and Appending
- SQL Server 表分区备忘
- Android Camera开发:周期性循环自动聚焦auto focus挂掉原因分析(preview is not enabled)
- getCurrentSession 与 openSession() 的区别
- Android图片加载框架最全解析(三),深入探究Glide的缓存机制
- 【Hadoop】mapreduce采用多进程与spark采用多线程比较
- MySQL数据库查询优化建议
- guestfish修改镜像内容
- Metasploit对安卓手机的攻击
- AlvinZH掉坑系列讲解(背包DP大作战H~M)
热门文章
- 应用安全 - 编程语言 | 框架 - PHP - Djiango - 漏洞 -汇总
- python 连接Oracle 的步骤
- 统计学习方法 | 第3章 k邻近法
- git clone 报错 fatal: protocol 'https' is not supported 解决办法
- MFC多线程的创建使用
- Java Web开发技术教程入门-自定义标签
- WPF中Matrix介绍
- sql--left join,right join, inner join
- php 技术点积累
- 转载:JavaWeb 文件上传下载