【发布时间】:2016-06-22 08:00:15
【问题描述】:
一无所有,
我的问题与这些类似: get super class value in java Getting the name of a sub-class from within a super-class
但不能解决我的问题。所以,我要解释一下。我希望不要重复一个话题...
我正在创建一个层次结构。此层次结构仅适用于具有 getter 和 setter 的对象。仅用于演出信息。
好吧,我想正确地执行我的层次结构,但不使用修饰符做一些不合逻辑的事情。这是我的类的简化示例,不完全是 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 类的所有方法都必须是公共的,变量没有正确封装。
还有其他方法可以做到这一点吗? 这是最好/最坏的方式吗? Getter 和 setter 可能是“跳跃”修饰符逻辑的例外?
我希望你能理解我的例子和我的“英语”。
先谢谢你了。
【问题讨论】:
-
您要解决的问题是什么? B和C应该继承A的方法。使用getter/setter是一种实现封装的策略。
-
类的私有属性不会被子类继承。因此,您显然必须在子类中使用 getter 和 setter。如果你想从子类中直接访问私有变量,比如“id”,你需要将它们声明为受保护的。
标签: java hierarchy hierarchical-data getter-setter