首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用正确的getter和setters方法的类修饰符纠正Java中的层次结构

使用正确的getter和setters方法的类修饰符纠正Java中的层次结构
EN

Stack Overflow用户
提问于 2016-03-08 19:35:13
回答 3查看 462关注 0票数 0

在此之前,

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

但不能解决我的问题。所以,我来解释一下。我希望不会重复一个话题。

我正在创建一个层次结构。此层次结构仅适用于具有getter和setter的对象。只是为了给大家提供一些信息。

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

代码语言:javascript
运行
复制
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“没有正确封装。

代码语言:javascript
运行
复制
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(){...}

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

代码语言:javascript
运行
复制
B.getDataB();
B.getId();
B.getName();
B.getAge();

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

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

有没有其他方法可以做到这一点?这是最好的/最坏的方法吗?Getter和setter可能是“跳过”修饰符逻辑的一个例外?

我希望你能理解我的例子和我的“英语”。

感谢您的支持。

EN

回答 3

Stack Overflow用户

发布于 2016-03-08 19:45:20

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

  1. 最好的方法是在基类中设置公共方法来访问私有数据成员。这就是您所应用的。
  2. 另一种方法是使您的基类成员受保护,并在子类(继承它们)中公开方法以获取和设置它们。

根据我的知识和其他JAVA书籍,像Paul Deitel这样的作者更喜欢第一种方法来实现最大程度的封装。

票数 2
EN

Stack Overflow用户

发布于 2016-03-08 19:40:29

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

如果在类A中声明变量,则应在类A中提供变量。如果你需要在子类中有任何变化,那么重写。

这使得代码更具可读性,更易于调试。

顺便说一句,除了A类之外,你不能在任何地方编写id的getter/setter,因为它是私有的。所以,在这种情况下,上述理论也是成立的。

票数 1
EN

Stack Overflow用户

发布于 2016-03-08 19:43:54

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

希望能对你有所帮助。

实际上,我们使用getter和setter来

  • Reusability
  • to在programming
  • Getter的后期阶段执行验证,setter方法是访问私有类成员的公共接口。

封装过程:封装过程是to make fields privatemethods public

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

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

即使getter and setter methods没有添加新的功能,我们也可以改变主意,稍后再回来,使该方法成为saferfaster

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35866276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档