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()方法,子类均从中继承并重写该方法,方便扩展。

  内存分析:

最新文章

  1. linq join的lambda写法
  2. 89C51单片机实现的流水灯
  3. 插件介绍 :cropper是一款使用简单且功能强大的图片剪裁jQuery插件。
  4. js判断输入是否为空,获得输入的类型
  5. C语言初学 俩数相除问题
  6. C# for循环①护栏长度 ②广场砖面积 ③判断闰年平年
  7. Photon的使用
  8. CDI services--Event(事件)
  9. build/temp.linux-x86_64-2.7/_openssl.c:493:30: fatal error: openssl/opensslv.h: No such file or directory
  10. OI生涯回忆录 2018.11.12~2019.4.15
  11. 基于 Python 和 Pandas 的数据分析(5) --- Concatenating and Appending
  12. SQL Server 表分区备忘
  13. Android Camera开发:周期性循环自动聚焦auto focus挂掉原因分析(preview is not enabled)
  14. getCurrentSession 与 openSession() 的区别
  15. Android图片加载框架最全解析(三),深入探究Glide的缓存机制
  16. 【Hadoop】mapreduce采用多进程与spark采用多线程比较
  17. MySQL数据库查询优化建议
  18. guestfish修改镜像内容
  19. Metasploit对安卓手机的攻击
  20. AlvinZH掉坑系列讲解(背包DP大作战H~M)

热门文章

  1. 应用安全 - 编程语言 | 框架 - PHP - Djiango - 漏洞 -汇总
  2. python 连接Oracle 的步骤
  3. 统计学习方法 | 第3章 k邻近法
  4. git clone 报错 fatal: protocol '–https' is not supported 解决办法
  5. MFC多线程的创建使用
  6. Java Web开发技术教程入门-自定义标签
  7. WPF中Matrix介绍
  8. sql--left join,right join, inner join
  9. php 技术点积累
  10. 转载:JavaWeb 文件上传下载