Re: [問題] 多型的修飾詞?
: 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. 紅色的部份就是不能執行)
: 謝謝!
static void basefoo(Base2 b){
b.foo();●
}
這個好像是叫做動態語言或是靜態語言的差異吧?
總之在JAVA中的運作邏輯是這樣的
JAVA編譯器: 嗯,有個Base2,我要去執行它的foo方法
裡面的真實型別是什麼我不管,反正他是Base2就是了
嗯,Base2的foo法是private,所以我不能執行他 (報錯)
static void basefoo(Base2 b){
b.foo();●
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.117.36.2
推
12/27 23:09, , 1F
12/27 23:09, 1F
推
12/27 23:12, , 2F
12/27 23:12, 2F
推
12/27 23:20, , 3F
12/27 23:20, 3F
答案是:都是
但是編譯器會把他當成Base2來看待
如果你要編譯器把他當成Derived2,妳必須要作轉型
Derived2 d=(Derived2)b;
這樣一來,編譯器就會把d當成是Derived2來看待
※ 編輯: LaPass 來自: 114.41.98.243 (12/28 01:16)
→
12/29 18:53, , 4F
12/29 18:53, 4F
→
12/30 11:43, , 5F
12/30 11:43, 5F
→
12/30 11:45, , 6F
12/30 11:45, 6F
討論串 (同標題文章)