作者moremore1234 (汉生博依)
看板java
标题Re: [J2SE] 多型与转型
时间Thu Jul 16 12:17:51 2009
※ 引述《kun25086 (我是宅宅)》之铭言:
: ※ 引述《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呢?
: 是因为属性和方法是不一样的做法吗? 还是小弟我的观念有问题?
: 烦请各位高手帮我解答一下,感恩!
Java对多型(Polymorphism)的实现方式为Overriding & Overloading
overriding - 父类别与子类别多型态的表现方式
子类别中的method与父类别定义相同的名称与参数(完全一样)
overloading - 一个类别的多型态表现方式
一个类别中定义多个相同的method,但却有不同个数的参数或参数类型
也就是说 member成员是没有被含括在内的
依照我对你的例子的解读
应该是有个叫做father的东西 实体是Son 可是看他的时候要用Father的观点来看待
第一次的print(father.greeting());是会找Son的greeting()
因为多型的关系会找的是被overiding 的method
第二次print是father.name 这不在多型的实现方式内
所以他会照着Father的观点来找name的member
第三次的print是father.getName()
由於没有overriding 所以只好找Father内的getName()
如果你有overriding 那印出的时候就会找Son内的getName()
这段的观念我觉得猛虎书里面的例子解释的很清楚
如果不懂就去翻翻吧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.204.111.162
1F:→ conanist:我也是看猛虎的说 书写得很好明白 07/16 18:34
2F:推 kun25086:这麽说我懂了,谢谢各位的解答!感恩! 07/17 16:51