Java保护的'getters'与嵌套类

时间:2013-04-09 07:44:50

标签: java inheritance field protected nested-class

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

5 个答案:

答案 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;
        }
    }
}

在使用extendsimplements关键字之前,您不使用继承,因此您可能希望SubClass扩展Parent类(在不同的文件中)并且变量将受到保护(或公共)级别访问。请注意,在相同的包含或同一类中,在网格中占据优势。以上两个示例的工作原理是因为SAME类中的另一个类作为父类。

只需按照网格即可。

答案 4 :(得分:1)

有些情况下,暴露受保护的字段或受保护的访问器方法是有意义的。所以这一切都取决于您对父类的设计,以及您希望子类如何使用您的父类。

然而,这是肯定的:“将子类嵌套在超类中是否更好”< - 这很少是正确的选择。