キラン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()
あなたの質問/ユースケースに矛盾だろうインターフェイスに