Javaで実行時ポリモーフィズムを実現する方法

キランBiradar:

以下のプログラムを考えてみます。

class Bike{
   void run(){System.out.println("running");}
 }

class Splender extends Bike{

   void run(){
          System.out.println("running safely with 60km");
   }

   void run2(){
        System.out.println("running2 safely with 60km");
   }

   public static void main(String args[]){
     Bike b = new Splender();//upcasting
     b.run2();
   }
 }

私の質問:

b.run2();

アクセス方法run2、基本クラスのオブジェクトを使用して、派生クラスのメソッドを?今のところ、それはコンパイルエラーを投げています。

242/Splender.java:12: error: cannot find symbol
     b.run2();
      ^
  symbol:   method run2()
  location: variable b of type Bike
1 error
ItFreak:

assiginingときBike b = new Splender();、あなたは変数に割り当てるbの種類をBikeアクセス方法をSplender、あなたはキャストする必要があります。((Splender) b).run2();

私はあなたのコメントを見たように:コンパイラは「専門」方法を知っていないのと同じコンパイル「問題」のインターフェイスの結果を実装し、彼は唯一のインターフェイスのmethdodsを知っています。しかし、キャストは、あまりにもそこに動作します。
これを回避する唯一の方法は、移動することですrun2()あなたの質問/ユースケースに矛盾だろうインターフェイスに

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=182662&siteId=1