什么都没有,
我的问题与这些相似: 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类的所有方法都必须是公共的,变量没有被正确封装。
还有其他方法吗? 这是最好/最差的方式吗? 吸气剂和制定者可能是“跳过”修饰符逻辑的例外吗?
我怀疑你能理解我的榜样和我的“英语”。
先谢谢你。
答案 0 :(得分:2)
有多种方法可以实现封装。
根据我的知识和其他JAVA书籍,像Paul Deitel这样的作者更喜欢第一种实现最大封装的方法。
答案 1 :(得分:1)
关于getter/setter
,有一个非常简单的规则:
如果您在班级
A
中声明变量,则应在班级getter/setter
中提供A
。如果您需要在子类中进行任何变异,则覆盖。
这使代码更易读,更容易调试。
顺便说一句,你不能在id
之外的任何地方写A
的getter / setter,因为它是私有的。因此,在这种情况下,上述理论也符合。
答案 2 :(得分:1)
简单来说,
您可以将变量声明为private
。但相关的getter/setter
必须是公开的。
希望它会对你有所帮助。
实际上我们使用getter和setter来
封装程序:
封装程序为to make fields private
和methods public
。
获取方法:我们可以访问私有变量。
Setter方法:我们可以修改私有字段。
即使getter and setter methods
没有添加新功能,我们也可以稍后改变主意,制作该方法safer
和faster
。