面向对象编程----多态_内存分析
多态的基本概念
编译时类型,运行时类型
多态有三个必要条件
继承,重写,父类引用指向子类对象
多态的内存分析

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();
}
}
本文来自博客园,作者:神奇的梦,转载请注明原文链接:https://www.cnblogs.com/fantasticDream/p/16327727.html
浙公网安备 33010602011771号