作者broodstare (交給C4就對了)
看板java
標題[問題] 多型的修飾詞?
時間Fri Dec 27 11:27:26 2013
各位前輩好, 今天天氣十分冷...大家要作好保暖
(小弟已經冷到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