0

Java - 我有一个抽象基类,我想从子类中设置一些基类的属性。最好的方法是什么?使财产受到保护?在基类中创建设置器?

public abstract class A {
protected String tag;
protected String apiUrl;
    // Setter
    public void setApiUri(String url) {
        this.apiUrl = url;
    }
}

public class B extends A {
    tag = "Class B";
    apiUrl = "Class B Prefs";
}

public class C extends A {
    tag = "Class C";
    apiUrl = "Class C Prefs";
}

请让我知道什么是最好的方法/更好的方法。

4

2 回答 2

3

如果您想要最大程度的封装,请将基类字段设为私有并提供受保护的访问器。这通常是最佳做法。

如果您对最大封装不太在意,则可以使字段受到保护,但是它将类耦合在一起甚至比继承本身(呃)更紧密地结合在一起。

一般来说,您最好的选择是上面的第一个选项。JVM 的 JIT 可以优化调用,并有助于保持类松散耦合

于 2012-07-25T18:38:21.733 回答
0

这取决于具体情况,但通常您希望从派生中保留基类的状态,并完全控制它如何实例化自己的成员。实现这一点的最佳方法是为基类指定一个构造函数,该构造函数输入并初始化其成员,并从具体类中调用它。这是一个例子:

abstract class Base{
    String s;
    int i;

    public Base(String s, int i){
        this.s = s; // Only base knows best how the initialization should be done
        this.i = i;
    }
}

class Concrete extends Base{

    // the role of the inheritor is to pass on the building blocks of its Base to Bases
    //constructor
    public Concrete(String s, int i) {
        super(s, i);
    }

}
于 2012-07-25T18:44:26.580 回答