如何在OOP语言中正确使用接口

时间:2012-12-11 04:20:17

标签: java interface polymorphism

我有这个问题很长一段时间但所有回答我的人都没有给我一个正确的答案。我认为接口在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.

那么,我们怎样才能解决这类问题。我知道我们可以为航班类型创建另一个界面 我用这个例子来表达我的问题。

3 个答案:

答案 0 :(得分:2)

我不是百分之百地解决你的问题,但似乎你在问你如何表达基本界面的其他行为。值得知道的是,接口可以扩展另一个接口:

public interface Aircraft extends Vehicle {

    public int noOfWings();
}

实现Aircraft的类需要实现VehiclenoOfWings声明的方法。

答案 1 :(得分:1)

我认为在你的VehiclenoOfWings方法中也可以定义为车辆也可以有翅膀(例如飞行)(或者你可以扩展Vehicle来创建另一个界面)< / p>

接口用于多态,但在您的示例中,在逻辑上也没有翼的多态性。通过仅在Flight

中定义它,使翅膀更加专业化

答案 2 :(得分:0)

在您的示例中,v2Vehicle,编译器只允许从此接口调用方法。你似乎明白这一点。如果要从实现类调用方法,则需要执行强制转换。

话虽如此,我很想知道你是否在真正的程序中遇到过这个问题?如果是这样,你能描述一下你遇到了什么以及为什么以这种方式使用界面是一个问题吗?

相关问题