作者icydream (巧虎)
看板java
标题[J2SE] 多型疑问
时间Thu Aug 14 00:30:18 2014
各位好,关於以下程式码的执行结果,有些疑问:
public class Parent {
public String name = "Parent";
public void show() {
System.out.println("I am Parent. "+this.name);
}
public static void main(String...args) {
Parent.Son son = new Parent.Son();
Parent parent = son;
System.out.println("the name of Son: "+son.name);
System.out.println("the name of Parent: "+parent.name);
son.show();
parent.show();
}
static class Son extends Parent {
public String name = "Son";
@Override
public void show() {
System.out.println("I am Son. "+this.name);
}
}
}
执行结果:
the name of Son: Son //son.name
the name of Parent: Parent //parent.name
I am Son. Son //son.show
I am Son. Son //parent.show
我有问题的是,第二行的执行结果为何不是Son?我的想法是,虽然parent的型态为Paren
t,但实际上却是由Son所产生的,所以这边的parent.name应该是指
Son类别的成员name才是。不晓得是我那里的观念有错,烦请解惑,谢谢。
--
Sent from my Android
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.80.91.34
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1407947421.A.533.html
1F:→ cyclone350: field 没有多型,method才有,这是规则 08/14 00:55
2F:→ ssccg: 你可以看method上面有个@Override,name上面没有 08/14 02:46
3F:→ swpoker: 所以我认为OO的本质是行为阿 08/14 09:54
4F:→ icydream: 了解,感谢各位回答 08/14 13:27