1

以下は、私が取り組んでいるコードですが、問題を解決することができません: ..以下のコードを見てください...

class Base{

      public void func(){

            System.out.println("In Base Class func method !!");         
      };
}

class Derived extends Base{

      public void func(){   // Method Overriding

            System.out.println("In Derived Class func method"); 
      }

      public void func2(){  // How to access this by Base class reference

            System.out.println("In Derived Class func2 method");
      }  
}

class InheritDemo{

      public static void main(String [] args){

            Base B= new Derived();
            B.func2();   // <--- Can I access this ??? This is the issue...
      }
}

前もって感謝します!!!!役立つ回答を待っています:) ...

4

5 に答える 5

4

短くて甘い?いいえ、できません..Base拡張クラスに存在する関数/メソッドをどのように知る必要がありますか?

編集:

Base明示的/型キャストによって、これは達成されるかもしれませんDerived.

if (B instanceof Derived) {//make sure it is an instance of the child class before casting
((Derived) B).func2();
}
于 2012-08-15T18:53:55.270 に答える
2

Bはfunc2を認識していないため、これはコンパイルさえしません

于 2012-08-15T18:52:11.760 に答える
2

オブジェクト B の型は Base であり、Base 型の public インターフェイスには func2() がないため、コードはコンパイルされません。

B を Derived として定義するか、B オブジェクトを Derived にキャストすることができます。

   Derived B = new Derived(); B.func2();
   //or
   Base B = new Derived(); ((Derived)B).func2();
于 2012-08-15T18:54:11.450 に答える
1

できるよ

((Derived) B).func2(); 

あなたはできません

B.func2(); 

func2 は Base クラスのメソッドではないためです。

于 2012-08-15T18:54:10.933 に答える
0

このような:

((Derived) B).func2();
于 2012-08-15T18:54:17.977 に答える