0

如果我在父类中有一堆字段都需要由子类继承,那么将子类嵌套在超类中,使字段受保护而不是私有,还是使用受保护的访问器更好?还是其他的选择?

4

5 回答 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 回答