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();
        }
    }