Java - 我有一个抽象基类,我想从子类中设置一些基类属性

时间:2012-07-25 18:35:22

标签: java oop

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

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";
}

请告诉我什么是最好的方法/更好的方法。

2 个答案:

答案 0 :(得分:3)

如果要进行最大封装,请将基类字段设为私有,并提供受保护的访问者。这通常是最好的做法。

如果你对最大封装没有太多的困扰,你可以使字段受到保护,但它将这些类耦合得比继承本身(呃)本质上更紧密。

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

答案 1 :(得分: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);
    }

}