有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java继承和实用程序方法及变量

我习惯于仅在child类是super类的更具体版本时使用继承。因此,我想知道从祖先继承一个类,只在父类中存储一个变量(所有继承的类都将使用该变量)是否正确

例如:

public abstract class EmployeeDetail{
    
    private final Employee executor;

    public EmployeeDetail(final Employee executor) {
        this.executor = executor;
    }

    protected Employee getExecutor(){
        return this.executor;
    }

    public abstract boolean edit(final Employee id);

}

public class EmployeeDetailLevel1 extends EmployeeDetail {

  public EmployeeDetailLevel1(final Employee executor) {
    super(executor);
  }

  public boolean edit(final Employee id){

    // some implementation that works with parent executor variable
    return false;

  }

}

问题:

  1. 从OOP的角度来看,这段代码正确吗?在这种情况下可能是的,因为父类EmployeeDetail指定了一个抽象方法,但是如果没有抽象/普通方法呢
  2. 如果我需要一些使用所有子类的实用方法呢?我应该把它移到另一个静态实用程序类中,还是可以放在EmployeeDetail

共 (1) 个答案

  1. # 1 楼答案

    以下是我不这么做的几个原因:

    • 超类是一个对象。它不抽象任何东西,也就是说,它不包含任何它独有的知识
    • 它不封装它的状态。也就是说,它的状态不是私有的
    • 这两者是紧密耦合的,如果超类发生变化,子类可能会中断,Liskov等。子类化的成本很高
    • 更重要的是,它表明缺少抽象

    每次你有一个“实用工具”,或者想以这种方式“共享代码”,这意味着你缺少一个抽象。需要有一些东西能做你想分享的事情,而且是专门做的。它可以同时为不再需要这种逻辑的下游事物定义不同的接口