2016-03-08 91 views
0

什么之前,正确的层次结构与正确的类修饰符getter和setter方法

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

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

我创建一个层次。此层次结构仅适用于使用getter和setter的Object。只是为了显示信息。

嗯,我想正确地做我的层次,但没有做一些ilogical与修饰。这是我班的一个简单的例子,是不完全的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是抽象类一样。

我的问题是:

我不知道,如果是正确的put方法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类的所有方法必须是公开的,变量未正确封装。

是否有其他方法可以做到这一点? 这是最好的/最坏的方式?吸气剂和吸附剂可能是“跳”修饰剂的逻辑的例外吗?

我excpect你能理解我的榜样,我的“英语”。

谢谢您的高级。

+1

你试图解决什么问题? B和C应该被期望继承A的方法。使用getters/setter是一种实现封装的策略。 –

+1

类的私有属性不会被子类继承。因此,你必须明显地在子类中使用getter和setter。如果你想直接访问子类中的“id”等私有变量,则需要将它们声明为受保护的。 –

回答

1

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

如果您在Agetter/setter类中声明的变量应该是A类提供。如果您需要子类中的任何突变,请覆盖。

这使代码更易读易调试。

顺便说一句,你不能写任何其他地方的id的获取者/设置者,然后是A类,因为它是私密的。所以,在这种情况下,上述理论也符合。

+0

好吧,我明白了。如果我总是对方法getter和setter使用“protected”修饰符,我总是可以在子类和孙子类中使用这些方法。 – Marquake

+0

嗯..但是最好让公开发布者/吸气者,除非你有任何理由使他们受到保护。我正在谈论简单的Java bean类 – Saif

+0

你说什么,它让我思考...而且我搜索了一些文档,并且发现了这个:[link] http://docstore.mik.ua/orelly/java-ent /jnut/ch06_02.htm[/link]
6.2.7。方法 beanbox可以向应用程序设计人员公开bean的方法。唯一正式的约定是这些方法必须公开。下面的指导方针也很有用,但是: – Marquake

1

简单, 你可以声明变量作为private。但相关getter/setter必须公开。

希望它能帮助你。

其实我们使用的getter和setter

  • 重用
  • 在编程
  • getter和setter方法来访问私有 类成员的公共接口的后期阶段执行验证。

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

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

安装人员方法:我们可以修改私人领域。

尽管getter and setter methods未添加新功能,但我们可以稍后改变主意,以便制作方法saferfaster

2

实现封装有多种方式。

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

根据我的知识和其他JAVA书籍作者喜欢Paul Deitel喜欢第一种实现最大封装的方法。

+0

好的,我打算使用第一个,我认为更好。谢谢。 – Marquake

相关问题