我最近加入了一家新公司,我正在努力适应他们的编码风格指南。我对改变我的编码风格没有任何问题,但是有一点,我不确定它们是否正确。
对于我的第一个任务,我必须扩展一个现有的抽象类来开发特定的功能。因此我需要访问这个抽象父类(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/