如果我在父类中有一堆字段都需要由子类继承,那么将子类嵌套在超类中,使字段受保护而不是私有,还是使用受保护的访问器更好?还是其他的选择?
问问题
753 次
5 回答
3
最简单的解决方案是保护超类字段或实例变量,但是,如果将它们设为私有,则始终可以通过 getter 和 setter 访问它们,这在概念上要好得多,因为它遵循封装原则。
于 2013-04-09T07:48:30.147 回答
1
最简单的解决方案似乎是使字段受到保护,除非您有令人信服的理由不这样做,否则就这样做。
于 2013-04-09T07:46:45.097 回答
1
我认为使用受保护的访问器是最好的方法和更常见的方法。
于 2013-04-09T07:48:45.933 回答
1
如果您希望子类可以访问它,则只剩下两个选项,公共和受保护。受保护的可能是您想要的。当您extends
在 java 中使用关键字进行继承时,下表适用。
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
如果您在超类中嵌套子类,那么您也可以使用私有。这是因为内部类是父类的一部分,因此也可以访问私有方法。
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
在使用or关键字之前,您不会使用继承,implements
因此您可能希望让子类扩展父类(在不同的文件中),并且变量将具有受保护(或公共)级别的访问权限。请注意,在同一个包中或在同一个类中需要优先考虑网格。上述两个示例之所以有效,是因为 SAME 类中的另一个类与父类相同。
只要按照网格,就是这样。
于 2013-04-09T07:57:59.247 回答
1
在某些情况下,公开受保护的字段或受保护的访问器方法是有意义的。所以这一切都取决于您对父类的设计,以及您希望子类如何利用您的父类。
但是,可以肯定的是:“将子类嵌套在超类中会更好” <-这很少是正确的选择。
于 2013-04-09T08:11:34.590 回答