Java-我有一个抽象基类,我想从子类设置基类的一些属性
Java-我有一个抽象基类,我想从子类设置基类的一些属性。最好的方法是什么?使财产受到保护?在基类中创建setterJava-我有一个抽象基类,我想从子类设置基类的一些属性,java,oop,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 {
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";
}
请告诉我什么是最好的方法/任何更好的方法。如果您想要最大程度的封装,请将基类字段设置为私有并提供受保护的访问器。这通常是最佳实践 如果您不太在意最大封装,可以使字段受到保护,但它将类紧密地耦合在一起,甚至比继承(er)本身更紧密
一般来说,您的最佳选择是上面的第一个选项。JVM的JIT可以优化调用,并且有助于保持类之间的松散耦合。如果您想要最大程度的封装,请将基类字段设置为私有并提供受保护的访问器。这通常是最佳实践 如果您不太在意最大封装,可以使字段受到保护,但它将类紧密地耦合在一起,甚至比继承(er)本身更紧密
一般来说,您的最佳选择是上面的第一个选项。JVM的JIT可以优化调用,并有助于保持类之间的松散耦合。这取决于具体情况,但通常您希望保留派生类的基类状态,并让它完全控制如何实例化自己的成员。实现这一点的最佳方法是为基类指定一个构造函数,该构造函数输入并初始化其成员,然后使用具体类调用它。以下是一个例子:
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);
}
}
这取决于具体情况,但通常您希望保留派生类的基类状态,并让它完全控制如何实例化自己的成员。实现这一点的最佳方法是为基类指定一个构造函数,该构造函数输入并初始化其成员,然后使用具体类调用它。以下是一个例子:
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);
}
}
在基类本身中创建get/set。需要时从子类调用它们。抽象类包含实现的方法。。例如,公共类C扩展了一个{A(){setTag(“类C”);}。}在基类本身中创建get/set。需要时从子类调用它们。抽象类包含实现的方法。。例如,公共类C扩展了{A(){setTag(“类C”);}