fantasticDream

面向对象编程----多态_内存分析

多态的基本概念

编译时类型,运行时类型

多态有三个必要条件

继承,重写,父类引用指向子类对象

多态的内存分析

package cn.bjsxt.oop.polymorphism01;

/**
* animal动物
* @author 神奇的梦
*
*/

public class Animal {
String str;
public void voice() {
System.out.println("普通动物的叫声");
}
}

class Cat extends Animal {
public void voice() {
System.out.println("喵喵喵");
}
public void catchMouse() {
System.out.println("抓老鼠");
}
}

class Dog extends Animal {
public void voice() {
System.out.println("汪汪汪");
}

public void seeDoor() {
System.out.println("看门");
}
}

class Tiger extends Animal {
public void voice() {
System.out.println("呜呜呜");
}
public void catchMouse() {
System.out.println("捕捉猎物");
}
}

class Pig extends Animal {
public void voice() {
System.out.println("哼哼哼");
}
}

package cn.bjsxt.oop.polymorphism01;
public class Test {

public static void testAnimalVoice(Animal c) {
c.voice();
if(c instanceof Cat) {
((Cat)c).catchMouse();
}

}
// javac Test.java
// 从 java Test开始
// (实际上会把里面相关的类一次性全部加载完)
// 然后找它的main方法开始执行
// 碰到Animal
public static void main(String[] args) {
// 1.加载Animal里面相关的类
// 2.a是局部变量一开始是没有值得
// 3.于是乎又加载newCat
// 在这里new Cat会调用Cat的构造器,Cat又会调用Animal的构造器
Animal a = new Cat();
// 父类引用指向子类对象
Cat a2 =(Cat)a;
a2.catchMouse();

}
}

posted on 2022-05-30 18:05  神奇的梦  阅读(72)  评论(0)    收藏  举报

导航