Java 我可以限制哪些类可以实现接口吗?
我有:Java 我可以限制哪些类可以实现接口吗?,java,generics,interface,Java,Generics,Interface,我有: 抽象类车辆 抽象类汽车扩展车辆和抽象类卡车扩展车辆 DodgeRam扩展卡车 接口转储 现在我想限制Dump接口,以便它只能由Truck的子类实现,而不明确说明Truck implement Dump。我该怎么做 我想我可以把Dump改成interface Dump,然后说Dump。问题是没有什么能阻止我说丰田章男实现Dump,而只是省去了类型 更新: 我这样做的原因是因为我想避免大量的类型检查/转换。假设我的Truck具有isofroad属性: public class Truck {
抽象类车辆
抽象类汽车扩展车辆
和抽象类卡车扩展车辆
DodgeRam扩展卡车
接口转储
Dump
接口,以便它只能由Truck
的子类实现,而不明确说明Truck implement Dump
。我该怎么做
我想我可以把Dump
改成interface Dump
,然后说Dump
。问题是没有什么能阻止我说丰田章男实现Dump
,而只是省去了类型
更新:
我这样做的原因是因为我想避免大量的类型检查/转换。假设我的Truck
具有isofroad
属性:
public class Truck {
private boolean isOffRoad;
public Truck(boolean isOffRoad) {
this.isOffRoad = isOffRoad;
}
public boolean isOffRoad() {
return isOffRoad;
}
}
假设我还有一家经销商
,负责管理我的车辆
列表:
public class Dealership {
List<Truck> getTrucks() {...}
List<Dump>getDumpers() {...}
}
我不想每次都进行打字检查/投下:
接口的定义是公共的,因此任何东西都可以实现它们。也许如果你解释了你真正的目标是什么,可能还有其他方法来实现它不,接口总是用来提供公共原型的,我们不能限制类来实现接口
你可以尝试的一件事是。。您可以在
class Truck
中定义Dump
接口,将Truck
类包范围改为public,并将Truck
的所有子类保持在同一个包中。这样就没有其他类可以访问Truck
类,这样就没有其他类可以实现Dump
接口。-这是没有尝试过的,但猜测它是有效的。如果你只想卡车来实现卸载,那么接口就不是做这项工作的合适工具
相反,必须声明中存在的方法将
转储到卡车
(要么是抽象
,要么不取决于此级别的实现是否合理)
例如:
如果Dump
是公共接口转储{void foo();}
然后Truck
应该是public抽象类Truck{public abstract void foo();}
这样您就不会实现Dump
,只有Truck
的子类才能实现foo()
不,没有任何东西可以阻止您。Java怎么会知道呢?你怎么能这么肯定某个聪明的人,带着割炬和焊工,哪天不会在丰田汽车的后面加一个翻车机?你不知道。可能是你发错问题了。“你能解释一下你最终想要实现什么吗?”大卫更新了我的问题
for (Dump dump: dealership.getDumpers() ) {
print dump.isOffRoad();
}
for (Dump dump: dealership.getDumpers() ) {
if (dump instanceOf Truck) {
print ((Truck)dump).isOffRoad();
}
}