JAVA笔记9-多态(动态绑定、池绑定)
2014-04-10 14:52
453 查看
1、动态绑定:执行期间(而非编译期间)判断所引用对象的实际类型,根据实际的类型调用相应方法。
2、多态存在的三个必要条件(同时):继承、重写、父类引用指向子类对象。
这三个条件满足后,当调用父类中被重写的方法时,实际new的是哪个子类对象,就调用该子类的方法。
例子:
显然,Animal类型的引用pet指向Cat类型的对象,这时不能访问eyesColor。但对于方法的调用,是根据实际对象的类型,这是动态实现的。(指向方法的指针是动态指向的)这样可扩展性达到最佳。(相关题目见本博客【转】深入理解Java多态性)一个主意的应用就是在游戏设计中,基类有drawMyself()方法,子类均从中继承并重写该方法,方便扩展。
内存分析:
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()方法,子类均从中继承并重写该方法,方便扩展。
内存分析:
相关文章推荐
- java动态绑定和多态
- Java之动态绑定(多态)
- Java知多少(30)多态和动态绑定
- Java 多态:动态绑定 及 内部实现机制
- Java静态绑定与动态绑定 隐藏 多态
- Java中的多态:动态绑定
- Java中的多态与动态绑定
- Java面向对象 多态动态绑定(非静态成员函数、成员变量、静态成员函数)
- Java 中的多态和动态绑定
- Java多态和动态绑定是如何实现的
- Java学习资料-方法覆盖、方法重载、多态与动态绑定
- Programming in Objective C学习笔记03——多态、动态绑定和动态类型
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之09-多态、动态类型和动态绑定——黑马 IOS 技术博客
- Java学习笔记之深入理解动态绑定和静态绑定
- Java——动态绑定和多态
- Java中的多态和动态绑定
- Java——动态绑定和多态
- Java动态绑定机制--笔记
- 【Java】多态和动态绑定中的坑
- java多态总结以及动态绑定机制