在Java中使用正确的类修饰符来更正getter和setter方法的层次结构

时间:2016-03-08 11:35:13

标签: java hierarchy hierarchical-data getter-setter

什么都没有,

我的问题与这些相似:     get super class value in java     Getting the name of a sub-class from within a super-class

但没有解决我的问题。所以,我要解释一下。我希望不再重复一个话题......

我正在创建一个层次结构。此层次结构仅适用于具有getter和setter的Object。仅供展示信息。

好吧,我想正确地对待我的层次结构,但是没有用修饰符做一些逻辑。这是我的类的简化示例,并不完全是Java伪代码:

Class A
    private id;

Class B extends A
    private dataB;

Class C extends A
    private dataC;

变量“id”对于B类和C类是常见的。因为B和C扩展A. 我想我永远不会将A类用于显示数据,只使用B和C,就像A是抽象类一样。

我的问题是:

我不知道是否正确将方法getter和setter放在类A中,修饰符为public并使用来自B类和C类的方法,因为层次结构是正确的,是逻辑但数据“id”未正确封装

Class A
    private id;
    private name;
    private age;

    public getId(){...}
    public getName(){...}
    public getAge(){...}

Class B extends A
    private dataB;

    public getDataB(){...}

Class C extends A
    private dataC;

    public getDataC(){...}

要访问我的对象,我想这样做:

B.getDataB();
B.getId();
B.getName();
B.getAge();

C.getDataC();
C.getId();
C.getName();
C.getAge();

这样可行但是A类的所有方法都必须是公共的,变量没有被正确封装。

还有其他方法吗? 这是最好/最差的方式吗? 吸气剂和制定者可能是“跳过”修饰符逻辑的例外吗?

我怀疑你能理解我的榜样和我的“英语”。

先谢谢你。

3 个答案:

答案 0 :(得分:2)

有多种方法可以实现封装。

  1. 最好的方法是在基类中创建公共方法来访问私有数据成员。这就是你所应用的。
  2. 另一种方法是让你的基类成员受到保护,子类中的公共方法(继承它们)来获取和设置它们。
  3. 根据我的知识和其他JAVA书籍,像Paul Deitel这样的作者更喜欢第一种实现最大封装的方法。

答案 1 :(得分:1)

关于getter/setter,有一个非常简单的规则:

  

如果您在班级A中声明变量,则应在班级getter/setter中提供A。如果您需要在子类中进行任何变异,则覆盖。

这使代码更易读,更容易调试。

顺便说一句,你不能在id之外的任何地方写A的getter / setter,因为它是私有的。因此,在这种情况下,上述理论也符合。

答案 2 :(得分:1)

简单来说, 您可以将变量声明为private。但相关的getter/setter必须是公开的。

希望它会对你有所帮助。

实际上我们使用getter和setter来

  • 复用性
  • 在编程的后期阶段执行验证
  • Getter和setter方法是访问私有的公共接口 班级成员。

封装程序: 封装程序为to make fields privatemethods public

获取方法:我们可以访问私有变量。

Setter方法:我们可以修改私有字段。

即使getter and setter methods没有添加新功能,我们也可以稍后改变主意,制作该方法saferfaster