2

私は長い間この質問をしていましたが、私に答えたすべての人が私に適切な答えを与えませんでした。インターフェイスはポリモーフィズムのためにOOP言語で使用されていると思いますが、以下のような状況では、その処理方法がわかりません[Javaで]

次のインターフェイスと2つのクラスを取りましょう。

public interface Vehicle{
    public int noOfWheels();
    public String movingMethod();
}

public class Car implements Vehicle{
    public int noOfWheels(){
            return 4;
    }

    public String movingMethod(){
        return "Drive";
    }
}

public class Flight implements Vehicle{

    public int noOfWheels(){
        return 5;
    }

    public String movingMethod(){
        return "Fly";
    }

    //a behaviour only applicable to a flight
    public int noOfWings(){
        return 5;
    }
}


=======================================
simulation

    Vehicle v1 = new Car();
    System.out.println(v1.noOfWheels());
    System.out.println(v1.movingMethod);

    Vehicle v2 = new Flight();
    System.out.println(v2.noOfWheels());
    System.out.println(v2.movingMethod);
    System.out.println(v2.noOfWings());//this is not working as Vehicle interface doesn't have this method.

では、どうすればこの種の問題の解決策を達成できるでしょうか。フライトタイプ用に別のインターフェイスを作成できることは知っていますが、この例を使用して問題を表現しました。

4

3 に答える 3

2

私はあなたの問題が何であるかについて100%ではありませんが、基本インターフェースに追加の動作を表現する方法を尋ねているようです. インターフェイスが別のインターフェイスを拡張できることを知っておく価値があります。

public interface Aircraft extends Vehicle {

    public int noOfWings();
}

を実装するクラスは、 および で宣言されAircraftたメソッドを実装する必要があります。VehiclenoOfWings

于 2012-12-11T04:28:26.307 に答える
1

私はあなたのVehicleクラスnoOfWingsメソッドで車両も翼を持つことができるように定義することもできると思います(例えば飛行)(またはVehicle別のインターフェースを作成するために拡張することができます)

インターフェースはポリモーフィズムに使用されますが、あなたの例では論理的に翼のポリモーフィズムもありませんでした。Flightクラスでのみ定義することで、翼のより特殊なケースにしました

于 2012-12-11T04:34:33.247 に答える
0

あなたの例でv2は、Vehicleであり、コンパイラはこのインターフェイスからのメソッドの呼び出しのみを許可します。あなたはこれを理解しているようです。実装クラスからメソッドを呼び出したい場合は、キャストを実行する必要があります。

そうは言っても、実際のプログラムでこの問題に遭遇したことがあるかどうか知りたいです。もしそうなら、あなたが遭遇したことと、なぜこのようにインターフェースを使用することが問題なのかを説明できますか?

于 2012-12-11T04:49:48.807 に答える