您的位置:首页 > 其它

多态polymorphic 内存图的小小示例

2015-10-18 15:47 246 查看
 1. 面向对象三大核心思想:

 *      封装: 封装,PPP是封装一部分,权限的封装,数据的封装,逻辑的封装.

 *      继承: 代码重用.

 *      多态:父类的引用指向的子类的对象.
   2. 里氏替换原则:能使用父类的地方,一定可以使用子类.

   3. 在编译的时候,会把父类的属性,生成父类属性列表,父类的属性有了,这种情况叫编译时绑定;

 *    在运行的时候,把子类生成一个对象,也有自己的属性列表,子类的属性就有了,叫运行时绑定.

 

   4. 在程序运行的时候,通过父类属性去调用子类对象的属性,特指成员方法.

 *

 *          程序开发完成---->编译成类文件------->运行

 *

   5.  super():官方说法是代表了父类型的特征,这里就是指父类里面的属性值列表.

 *          具体怎么调用的呢?

 *              在运行的时候

 *              1. 先遍历父类的属性列表;

 *              2. 再遍历子类的属性列表;

 *              3. 如果子类有相同,就调用子类的,没有就是用父类的;

 *              4. 如果父类中没有所指的属性,直接就报错,子类中根本不去,并且这个错,编译的时候就报错了,编译的时候,子类对象还没有,只能遍历父类的属性列表.
 下面是个具体的小例子:

public class Poly{
public static void main(String[] args){
Animal a1 = new Animal();
a1.eat();

Animal a2 = new Cat();  //多态,创建子类对象
a2.cry();
a2.eat();
//a2.move();  //父类中没有所指的属性,直接就报错,子类中根本不去,并且这个错,编译的时候就报错了,编译的时候,子类对象还没有,只能遍历父类的属性列表
}
}

class Animal {
public void eat(){
System.out.println( "动物吃东西" );
}

public void cry(){
System.out.println( "动物会叫" );
}
}
class Cat extends Animal {
public void eat(){
super.eat(); //父类里面的属性列表
System.out.println( "猫吃鱼" );
}

public void move(){
System.out.println( "猫走猫步" );
}
}

class Dog extends Animal {
public void eat(){
System.out.println( "狗啃骨头" );
}
}


以下是它的内存图:



纯属个人总结,希望园友们和前辈们可以多提提意见,以便让知识更加完整、充实, Thanks!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: