2

我有这个问题很长时间了,但是所有回答我的人都没有给我正确的答案。我认为这些接口在 OOP 语言中用于多态性,并且在如下情况下我不明白如何处理它,[在 java 中]

让我们采用以下接口和两个类,

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将需要实现Vehicle以及声明的方法noOfWings

于 2012-12-11T04:28:26.307 回答
1

我认为在您的VehiclenoOfWings方法中也可以定义为车辆也可以有翅膀(例如飞行)(或者您可以扩展Vehicle以创建另一个接口)

接口用于多态性,但在您的示例中,逻辑上也没有翅膀的多态性。Flight通过仅在类中定义它,您使它更专门用于翅膀

于 2012-12-11T04:34:33.247 回答
0

在您的示例中,v2是 aVehicle并且编译器仅允许从此接口调用方法。看来你明白这一点。如果要从实现类调用方法,则需要执行强制转换。

With that said, I'm interested to know if you have encountered this problem in a real program? If so, can you describe what you encountered and why using an interface in this way is an issue?

于 2012-12-11T04:49:48.807 回答