java的接口会造成菱形继承的,Java中接口的菱形继承问题?

有一个交通工具接口 Vehicle,包含 getSpeed 方法

然后有船只接口 Boat 继承自交通工具接口,包含 sail 方法,

有飞机接口 Plane 继承自交通工具借口,包含 fly 方法。

现在有一个又可以飞又可以航行的交通工具 BoatPlane,它要实现 Boat 和 Plane 两个接口

请看这样的代码:

public class Test {

public static void main(String[] args) {

Boat boat = new BoatPlane();

boat.sail();

System.out.println(boat.getSpeed()); // 输出1

Plane plane = (Plane) boat;

plane.fly();

System.out.println(plane.getSpeed()); // 输出2

}

}

interface Vehicle {

int getSpeed();

}

interface Boat extends Vehicle {

void sail();

}

interface Plane extends Vehicle {

void fly();

}

class BoatPlane implements Boat, Plane {

@Override

public int getSpeed() {

return 10;

}

@Override

public void sail() {

System.out.println("sail()");

}

@Override

public void fly() {

System.out.println("fly()");

}

}

现在,输出 1 和输出 2 的结果是一样的。

但是,我希望 Boat 和 Plane 在调用 getSpeed 时结果不一样,请问如何做到?

我在 StackOverFlow 中查到,Java 中不存在菱形继承导致的问题,因为具有相同方法签名的两个方法会被合并成一个。

这样 Java 就似乎不能通过接口来实现这样的功能了。

那么,Java 中有什么相对优雅的方式来实现呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值