看板 java 關於我們 聯絡資訊
各位前輩好, 今天天氣十分冷...大家要作好保暖 (小弟已經冷到key字都會抖了~~~) 最近在研究「多型」的概念,也爬了許多版上的文章,其中有一篇文章有一個程式 我有研究一下,但一直搞不太懂,程式碼如下: ======================================================================== class Base2{ private void foo(){ System.out.println("Base2"); } } class Derived2 extends Base2{ public void foo(){ System.out.println("Derived2"); } } public class Practice { static void basefoo(Base2 b){ b.foo(); } static void derivefoo(Derived2 d){ d.foo(); } public static void main(String[] args) { basefoo(new Derived2()); derivefoo(new Derived2()); } } ====================================================================== 我想請問的觀念是: 在main裡,我將new Derived2()指派給了Base2 b,雖然原先class Base2裡的method foo 是設為private,但就多型來說,我應該也把Drived2的public method foo給了b ,理當b.foo()應該是可以執行的吧? (ps. 紅色的部份就是不能執行) 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.110.189 ※ 編輯: broodstare 來自: 140.115.110.189 (12/27 11:28)
lovdkkkk:就多型來說, 是由 Base2 的觀點來看你要執行的 function 12/27 12:04
lovdkkkk:沒有把 Drived2 的方法給 b (反向繼承?) 這種事 @@ 12/27 12:05
jej:這幾個class的耦合性還是很高..不是學習泛型的好例子.. 12/27 12:37
jej:你的疑問 只要單純寫一個 new Base2() 然後看看能不能foo() 12/27 12:39
swpoker:要由上而下~而非由下而上 12/27 13:55
謝謝各位版大們回答!! (很抱歉因為今天下午忙碌,沒法即時回應) 我想自己也有點混亂了,那我想再請問一些追加的相關問題: Base2 b = new Derived2(); 就這個範例,是個好的寫法嗎? 是因為super-class Base2 與sub-class Derived2 的method有所重疊(即便他們的modifier不同),導致這不是個很好例子? 所以要竟量避開這種寫法嗎? 謝謝Q___Q ※ 編輯: broodstare 來自: 140.115.5.114 (12/27 23:08)
PsMonkey:B b = new D() 這沒啥問題,很多時候都是這樣用 12/28 00:33
bleed1979:jej正解,原po連可視都還沒搞懂。談多型有點早了。 12/29 18:55