标签:属性 mem image 总结 弊端 分享图片 new 技术 年龄
https://www.zhihu.com/question/30082151
void foo(String str);
void foo(int number);
class Parent {
void foo() {
System.out.println("Parent foo()");
}
}
class Child extends Parent {
void foo() {
System.out.println("Child foo()");
}
}
Parent instance = new Child();
instance.foo(); //==> Child foo()
void foo(String str);
void foo(int number);
class Parent {
void foo() {
System.out.println("Parent foo()");
}
}
class Child extends Parent {
void foo() {
System.out.println("Child foo()");
}
}
Parent instance = new Child();
instance.foo(); //==> Child foo()
void foo(String str);
void foo(int number);
class Parent {
void foo() {
System.out.println("Parent foo()");
}
}
class Child extends Parent {
void foo() {
System.out.println("Child foo()");
}
}
Parent instance = new Child();
instance.foo(); //==> Child foo()
Parent instance = new Child();
instance.foo(); //==> Child foo()
class Animal {
int num = 10;
static int age = 20;
public void eat() {
System.out.println("动物吃饭");
}
public static void sleep() {
System.out.println("动物在睡觉");
}
public void run(){
System.out.println("动物在奔跑");
}
}
class Cat extends Animal {
int num = 80;
static int age = 90;
String name = "tomCat";
public void eat() {
System.out.println("猫吃饭");
}
public static void sleep() {
System.out.println("猫在睡觉");
}
public void catchMouse() {
System.out.println("猫在抓老鼠");
}
}
class Demo_Test1 {
public static void main(String[] args) {
Animal am = new Cat();
am.eat();
am.sleep();
am.run();
//am.catchMouse();这里先注释掉,等会会说明
//System.out.println(am.name);//这里先注释,待会说明
System.out.println(am.num);
System.out.println(am.age);
}
}
System.out.println(am.num);//输出结果为10
System.out.println(am.age);//输出结果为20
am.catchMouse();
System.out.println(am.name);
class Demo_Test {
public static void main(String[] args) {
Animal am = new Cat();
am.eat();
am.sleep();
am.run();
// am.catchMouse();
// System.out.println(am.name);
System.out.println(am.num);
System.out.println(am.age);
System.out.println("------------------------------");
Cat ct = (Cat)am;
ct.eat();
ct.sleep();
ct.run();
ct.catchMouse();
}
}
很明显,执行强转语句Cat ct = (Cat)am;之后,ct就指向最开始在堆内存中创建的那个Cat类型的对象了。这就是多态的魅力吧,虽然它有缺点,但是它确实十分灵活,减少多余对象的创建,不用说为了使用子类的某个方法又去重新再堆内存中开辟一个新的子类对象。以上。。
标签:属性 mem image 总结 弊端 分享图片 new 技术 年龄
原文地址:http://www.cnblogs.com/Simeonwu/p/8007077.html