java - 访问父类(super class)中的 protected 变量

标签 java oop inheritance

我最近加入了一家新公司,我正在努力适应他们的编码风格指南。我对改变我的编码风格没有任何问题,但是有一点,我不确定它们是否正确。

对于我的第一个任务,我必须扩展一个现有的抽象类来开发特定的功能。因此我需要访问这个抽象父类(super class)中声明的许多属性。为此,我建议更改这些属性的可见性并将它们声明为 protected 。他们的回复令我惊讶:

“永远不要!这绝对是反对 OOP 的,你会产生晦涩难懂且难以维护的代码!你所要做的就是在父类(super class)中创建一个 getter 并从子类中使用它来访问这些属性”。

嗯,我一直在抽象父类(super class)中使用 protected 属性,并直接从子类访问它们,我一直认为这没有什么问题。即使我会说,一直调用 getter 来访问父类(super class)中的属性比通过其名称使用它要慢......

你对此有何看法?是在父类(super class)中声明属性并直接访问它们的正常/标准编码风格,还是您认为为这些属性创建 getter 更好。

总结一下,我的方式:

public abstract class A {

    protected String variableA="a";

    public abstract methodToImplement();    

}

public MyClass B extends A {

    public methodToImplement() {
        System.out.println(variableA.length());
    }

}

他们的方式:

abstract class A {
    protected String variableA="a";
    public String getVariableA() {
        return variableA;
    }
    public abstract methodToImplement();
}

MyClass B extends A {
    public methodToImplement() {
        System.out.println(getVariableA().length());
    }
}

谢谢。

最佳答案

正如其他线程已经指出的那样,确实建议使用 getter 和 setter。原因是,如果您计划更改该值的表示形式(例如 StringBuilder 而不是 String),您将必须更改代码。 getter/setter 允许您以向 getter/setter 发送所需数据的方式进行编程,它们会将其存储在适当的字段中(例如,将其附加到 StringBuilder)。所以,是的,它似乎有很多优点,即使它不是您的编码风格。然而,当您同时使用 getter 和 setter 时,将变量声明为 protected 似乎很奇怪......

当 getter/setter 有点过分时,我个人会尽量避免使用它们。对我来说,它们对于值变量来说太过分了。对于引用变量来说,它们是一个好主意。

但是,我认为这里没有对错之分..

关于java - 访问父类(super class)中的 protected 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22831502/

相关文章:

java - java.net.Socket.setSoTimeout 可靠吗?

java - 如何配置 tomcat 以使用 log4j 登录不同的文件?

Java Programming for the Absolute Beginner 中列出的 Java 挑战

javascript - MyClass.prototype = new Object() 和 MyClass.prototype = Object 的区别

c++ - 如何根据类访问特定的 protected 继承成员?

javascript - Object 和 String 原型(prototype)不是定义字符串的原型(prototype)吗?

java - 如何在java中重现竞争条件?

java - 哪个是更合法的递归辅助方法?

java - 防止过度沮丧

oop - 策略模式和访问者模式有什么区别?