访问超类中的受保护变量

时间:2014-04-03 08:09:14

标签: java oop inheritance

我最近加入了一家新公司,我正在尝试习惯他们的编码风格指南。我没有问题改变我的编码风格,但有一点,我不确定它们是否正确。

对于我的第一个任务,我必须扩展一个现有的抽象类来开发特定的功能。因此,我需要访问在这个抽象超类中声明的许多属性。为此,我建议更改这些属性的可见性并将其声明为受保护。他的回答让我感到惊讶:

“从不!这绝对是针对OOP而你会产生模糊且难以维护的代码!你需要做的是在超类中创建一个getter并从子类中使用它来访问这些属性”。< / p>

好吧,我一直在抽象超类中使用受保护的属性并直接从子类中访问它们,我一直认为它没有任何问题。即使我会说,一直调用getter来访问超类中的属性比使用它的名称要慢...

你怎么看?它是正常的/标准的编码风格,在超类中声明属性并直接访问它们,还是你更喜欢为这些属性创建getters。

以我的方式sumarize:

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

我个人试图在他们有点矫枉过正时避免吸毒者/闯入者。对我来说,它们对价值变量来说太过分了。但是对于参考变量,它们是一个好主意。

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