类设计的最佳实践(子类+重写)

Boo*_*ley 2 java class

我想设计类层次结构.超类有一个抽象方法,子类必须重写这个方法,但我的问题是:这个方法使用超类(实例变量)的数据.

我设计了一些样式来解决这个问题:

样式1:使用私有实例变量并在子类中创建其他实例变量

class SuperClass {
    private T data;

    public SuperClass(T data) { /* ... */}

    public abstract void doSomething();
}

class SubClass extends SuperClass {
    private T data; // use another variable

    public SubClass(T data) {
        super(data);
        this.data = data;
    }

    public void doSomething() {
        // use 'data'
        int length = data.getLength(); // for example...
    }
}
Run Code Online (Sandbox Code Playgroud)

样式2:使用受保护的实例变量:

class SuperClass {
    protected T data;

    public SuperClass(T data) { /* ... */}

    public abstract void doSomething();
}

class SubClass extends SuperClass {
    public void doSomething() {
        // use 'data'
        int length = data.getLength(); // for example...
    }
}
Run Code Online (Sandbox Code Playgroud)

样式3:使用私有实例变量和受保护的方法:

class SuperClass {
    private T data;

    public SuperClass(T data) { /* ... */}

    public abstract void doSomething();

    protected T getData() {
        return data;
    }
}

class SubClass extends SuperClass {
    public void doSomething() {
        // use 'data'
        int length = getData.getLength(); // for example...
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个更好?或者有更多解决方案来更好地解决我的问题?

Mar*_*nik 9

第三种方法通常是首选方法,如果您设计公共子类,则必须使用.超类希望尽可能多地控制其内部.

另一方面,如果您正在开发一个全部位于同一个包中的封闭层次结构,或者至少在同一个项目中,则可以选择将var公开为protected,如果有任何好处的话.

但是,复制子类中的私有var是所有计数的失败.我想不出任何可以帮助任何事情的场景.