2013-04-09 120 views
0

如果我在父类中有一堆字段都需要被子类继承,那么将子类嵌套在超类中会更好吗?比私人还是使用受保护的访问者?或者其他一些选择?Java - 受保护的'getters'与嵌套类

+0

由于这很大程度上取决于您的用例,请您详细说明一下吗? – 2013-04-09 07:47:38

+0

定义“更好”。 – 2013-04-09 07:53:44

+0

我有一个超类(Employee),它拥有很多其子类(员工类型)以及一些工资/税收计算方法(抽象和具体)通用的数据。这个子类做了大量的计算,它需要超类中字段的数据。只有很少的字段需要从这个类的外部访问。 – 2013-04-09 07:56:24

回答

3

最简单的解决方案是使超类字段或实例变量受到保护,但是,如果将它们设置为私有,则可以始终通过getter和setter访问它们,因为它遵循封装原则,因此概念上更好。

1

最简单的解决方案似乎是让这些字段受到保护,除非您有一个令人信服的理由不这样做,否则就去做。

1

我认为使用受保护的访问器是最好的方法和更常见的方法。

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 

如果您在超类中发现了子类,那么您也可以使用私有类。这是因为内部类是父类的一部分,因此也可以访问私有方法。

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关键字不使用继承,所以你可能希望有子类扩展父类(在不同的文件中)和变量会保护(或公共)级访问。请注意,处于同一家庭或同一班级需要网格中的优秀。以上两个例子的工作原因是SAME类中的其他类作为父类。

只要按照网格,就是这样。

1

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

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

+0

谢谢,我会记住它。 – 2013-04-09 08:34:49