gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:00:35 25 4
gpt4 key购买 nike

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

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

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

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...
}
}

样式 2:使用 protected 实例变量:

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...
}
}

样式3:使用私有(private)实例变量和 protected 方法:

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...
}
}

他们哪个更好?或者有更多的解决方案可以更好地解决我的问题?

最佳答案

第三种方法通常是首选,并且如果您为公共(public)子类化进行设计,则这是必须的。父类(super class)希望对其内部保持尽可能多的控制。

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

然而,在子类中复制私有(private)变量从所有角度来看都是失败的。我想不出任何场景这会有所帮助。

关于java - 类设计的最佳实践(子类+重写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com