在此之前,
我的问题和这些类似: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放在带有public修饰符的类A中,并使用来自类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可能是“跳过”修饰符逻辑的一个例外?
我希望你能理解我的例子和我的“英语”。
感谢您的支持。
发布于 2016-03-08 11:45:20
有多种方法可以实现封装。
根据我的知识和其他JAVA书籍,像Paul Deitel这样的作者更喜欢第一种方法来实现最大程度的封装。
发布于 2016-03-08 11:40:29
关于getter/setter
,有一个非常简单的规则:
如果在类
A
中声明变量,则应在类A
中提供变量。如果你需要在子类中有任何变化,那么重写。
这使得代码更具可读性,更易于调试。
顺便说一句,除了A
类之外,你不能在任何地方编写id
的getter/setter,因为它是私有的。所以,在这种情况下,上述理论也是成立的。
发布于 2016-03-08 11:43:54
简单地说,您可以将变量声明为private
。但是相关的getter/setter
必须是公共的。
希望能对你有所帮助。
实际上,我们使用getter和setter来
封装过程:封装过程是to make fields private
和methods public
。
Getter方法:我们可以访问私有变量。
设置方法:我们可以修改私有字段。
即使getter and setter methods
没有添加新的功能,我们也可以改变主意,稍后再回来,使该方法成为safer
和faster
。
https://stackoverflow.com/questions/35866276
复制