1

「車」というインターフェースを作成しています

public interface Car {
    public void drive(int Speed, int Gear ); // for cars which have gears
    public void drive(int Speed); // for cars which do not have gears
}

今、私はSimpleCarとAdvanceCarと言う私の実装クラスを作成しています。

  • SimpleCarにはギアがありません
  • AdvanceCarにはギアがあります

これで、実装クラスを作成するときに、実装クラスにそれらを含めたくない場合でも、両方のメソッドをコーディングする必要があります。

public class SimpleCar implements Car {
    public void drive(int Speed, int Gear ){ ... }; // dont want this method in SimpleCar
    public void drive(int Speed ){ ... };
}

誰かがメソッドを持っているが実装クラスが異なる署名を持っている私のインターフェースを設計するのを手伝ってもらえますか?

4

6 に答える 6

3
public interface Car {

    public void drive(int Speed, int Gear); // for cars which have gears

    public void drive(int Speed); // for cars which do not have gears
}



public class CarAdapter implements Car {

    @Override
    public void drive(int Speed, int Gear) {
        // TODO Auto-generated method stub

    }

    @Override
    public void drive(int Speed) {
        // TODO Auto-generated method stub

    }

}


public class AdvancedCar extends CarAdapter {

    @Override
    public void drive(int Speed) {
        // TODO Auto-generated method stub
        super.drive(Speed);
    }

    @Override
    public void drive(int Speed, int Gear) {
        // TODO Auto-generated method stub
        super.drive(Speed, Gear);
    }

}


public class SimpleCar extends CarAdapter {

    @Override
    public void drive(int Speed) {
        // TODO Auto-generated method stub
        super.drive(Speed);
    }


}
于 2012-10-22T07:22:44.787 に答える
2

インターフェイスと、インターフェイスを拡張するインターフェイスCarという名前のインターフェイスが必要です。GearCarCar

このようにして、インターフェースを実装することができGearCar or Carます。

于 2012-10-22T07:18:10.530 に答える
2

次の設計を参照してください。私はあなたの要件に基づいてインターフェースの原因を削除gearしました。それはすべての車に有効ではないため、インターフェースの一部にすることはできません。Car

public interface Car 
{     
    // public void drive(int Speed, int Gear ); // for cars which have gears     
    public void drive(int Speed); // for cars which do not have gears 
}

public abstract class SimpleCar implements Car
{
    public void drive(int speed) { ... }
    public abstract void accelerate(); // you can move it to interface also
}

public abstract class AdvancedCar implements Car
{
    protected int CURRENT_GEAR = 1;
    public void drive(int speed) { ... }
    public void changeGear(int gear) { ... }
    public abstract void accelerate();
}

public class Reva extends SimpleCar
{
    // provide implementation for accelerate
}

public class Ferrari extends AdvancedCar
{
    // provide implementation for accelerate
}
于 2012-10-22T07:20:48.253 に答える
1

CarAdapterインターフェイスのすべてのメソッドの空の実装を提供するように記述します。次に、SimpleCar拡張しますCarAdapter(デフォルトで実装されますCar

これは、Swingアプリケーションで頻繁に見られます。

于 2012-10-22T07:15:49.953 に答える
0

Gearクラス自体が抽象でない限り、クラスでは実装しているインターフェイスで宣言されているすべてのメソッドを実装する必要があるため、必要なメソッド宣言を削除するだけです。

また、インターフェースのメソッドを実装したくない場合は、抽象クラスとしてSimpleCarとを持っている必要があります。AdvancedCar

于 2012-10-22T07:13:43.600 に答える
0
public interface Vehicle {
    public void drive(int Speed);
}

public interface Car extends Vehicle{
    public void drive(int Speed, int Gear ); 
}

public class SimpleCar implements Vehicle {
    public void drive(int Speed ){ ... };
}

public class AdvancedCar implements Car {
    public void drive(int Speed, int Gear ){ ... };
    public void drive(int Speed ){ ... };
}
于 2012-10-22T07:20:17.363 に答える