2012-07-25 61 views
0

Java - 我有一个抽象基类,我想从子类设置基类的几个属性。什么是最好的方式来做到这一点?使属性保护?在基类中创建setter?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"; 
} 

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

+0

在基类本身中创建get/set。需要时从子类中调用它们。抽象类包含已实现的方法。例如,公共类C扩展A {){setTag(“Class C”);}。 } – kosa 2012-07-25 18:36:54

回答

3

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

如果你对最大封装不感兴趣,可以使字段保护,但它将类连接在一起比继承固有的更紧密。

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

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

}