作者kun25086 (我是宅宅)
看板java
标题Re: [J2SE] 多型与转型
时间Tue Jul 14 17:05:07 2009
※ 引述《forris (乔巴)》之铭言:
: class Father{
: String name = "Father";
: String getName(){
: return name;
: }
: String greeting(){
: return "class Father";
: }
: }
: class Son extends Father{
: String name = "Son";
: String greeting(){
: return "class Son";
: }
public static void main ( String[] args ) {
Father father = new Son();
System.out.print( father.greeting() );
System.out.print( father.name );
System.out.print( father.getName() );
}
: }
想请问在main里的程式,
输出的结果是 class Son , Father , Father
爬文後小弟对於输出的结果有些不了解,想请问各位小弟的观念哪里有问题?
Father father = new Son() ; <== 一个叫作father的东西,长得像Father,
但实体是Son。
所以第一个print ( father.greeting() ) ; 会去找Son里面的greeting(),
(因为实体是son嘛),也因此印出来的东西是 class Son。
第三个print ( father.getName() ); 会去Son里找getName(),但由於Son里没有,
所以会去父类别里找getName(),因此印出来是Father。
不过第二个,为什麽不是在Son里面找name,而是去Father里面找name呢?
是因为属性和方法是不一样的做法吗? 还是小弟我的观念有问题?
烦请各位高手帮我解答一下,感恩!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.241.0.157
1F:→ adrianshum:简单说法是field没 overriding 07/14 17:50
2F:→ kun25086:不好意思 请问...field是? 07/15 09:07
3F:→ conanist:函式才有overriding 变数的部分属於遮蔽 整个流程就是 07/15 09:34
4F:→ adrianshum:field=attribute/member field/ member variable... 07/15 09:36
5F:→ kun25086:谢谢各位高手的解答!感恩! 07/17 16:54