Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-我有一个抽象基类,我想从子类设置基类的一些属性_Java_Oop - Fatal编程技术网

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

Java-我有一个抽象基类,我想从子类设置基类的一些属性,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 {

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

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

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

如果您不太在意最大封装,可以使字段受到保护,但它将类紧密地耦合在一起,甚至比继承(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”);}