如果我在父类中有一堆字段都需要由子类继承,那么将子类嵌套在超类中更好,使字段受保护而不是私有,还是使用受保护的访问器?还是其他一些替代方案?
答案 0 :(得分:3)
最简单的解决方案是使超类字段或实例变量受到保护,但是,如果将它们设为私有,则可以始终通过getter和setter访问它们,这在概念上要好得多,因为它遵循封装原则。
答案 1 :(得分:1)
最简单的解决办法似乎是让字段受到保护,除非你有其他令人信服的理由,否则就这样做。
答案 2 :(得分:1)
我认为使用受保护的访问器是最好的方法和更常用的方法。
答案 3 :(得分:1)
如果您希望子类可以访问它,那么只剩下两个选项,public和protected。保护可能是你想要的。当您在java中使用extends
关键字进行继承时,下表适用。
Access Levels
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
如果NEST超类中的子类,那么你也可以使用私有。这是因为内部类是父类的PART,因此也可以访问私有方法。
public class Parent {
private int x = 5;
//Not really a subclass
private class NestedClass {
public NestedClass() {
int hax = new Parent().x; // Works!
}
}
//More of a nestedclass than a subclass.
private class SubClass extends Parent {
public SubClass() {
int stillHax = new Parent().x;
}
}
}
在使用extends
或implements
关键字之前,您不使用继承,因此您可能希望SubClass扩展Parent类(在不同的文件中)并且变量将受到保护(或公共)级别访问。请注意,在相同的包含或同一类中,在网格中占据优势。以上两个示例的工作原理是因为SAME类中的另一个类作为父类。
只需按照网格即可。
答案 4 :(得分:1)
有些情况下,暴露受保护的字段或受保护的访问器方法是有意义的。所以这一切都取决于您对父类的设计,以及您希望子类如何使用您的父类。
然而,这是肯定的:“将子类嵌套在超类中是否更好”< - 这很少是正确的选择。