【问题标题】:Implementing interface with inherited type in Java在Java中实现具有继承类型的接口
【发布时间】:2021-03-17 06:49:11
【问题描述】:

如何在界面中创建 addWorker? OfficeWorker 继承自 Worker,现在我想为少数 Worker 制作接口。我不知道如何正确地做到这一点。 void addWorker(Worker worker) 和 void addWorker(Worker worker) 错误。

界面

public interface TypeOfWorker {        
    void addWorker(Worker worker);
}

办公室工作人员

public class OfiiceWorker extends Worker implements TypeOfWorker {
    private int officeID;
    private int intelectl;
    private List<OfiiceWorker> ofiiceWorkers = new ArrayList<>();

    public OfiiceWorker(String name, String surname, int age, int experience, String street, int building,
            int local, String city, int officeID, int intelectl) {
        super(name, surname, age, experience, street, building, local, city);
        this.officeID = officeID;
        this.intelectl = intelectl;
    }

    @Override
    public void addWorker(OfiiceWorker ofiiceWorker) {
        ofiiceWorkers.add(ofiiceWorker);
    }
}

工人

public abstract class Worker {
    private int identifier;
    private String name;
    private String surname;
    private int age;
    private int experience;
    private String street;
    private int building;
    private int local;
    private String city;

    public Worker() {
    }

    public Worker(String name, String surname, int age, int experience, String street, int building, int local,
            String city) {
        setIdentifier();
        this.name = name;
        this.surname = surname;
        this.age = age;
        this.experience = experience;
        this.street = street;
        this.building = building;
        this.local = local;
        this.city = city;
    }

    public void setIdentifier() {
        this.identifier = (int) (System.currentTimeMillis() / 1000);
    }
}

【问题讨论】:

  • 也许你应该解释你想用你的界面实现什么,否则很难帮助你。此外,您当前的解决方案看起来像一个糟糕的设计,OfiiceWorker 的每个实例都将包含其他实例的列表。你为什么要这个,这个列表不应该在另一个类中,而不是像某种 Worker 处理程序类。

标签: java inheritance interface


【解决方案1】:

你应该使用泛型来让编译器放松你的类型。首先让你的界面通用:

public interface TypeOfWorker<T extends Worker> {
    void addWorker(T worker);
}

然后声明你的类的泛型类型:

public class OfiiceWorke extends Worker implements TypeOfWorker<OfiiceWorke> {

通过这些修改,以下内容很好:

@Override
public void addWorker(OfiiceWorke worker) { 

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2021-01-24
    • 2021-10-27
    • 2021-01-29
    • 2015-08-03
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多