假设我有两个构造函数类: Person和Arm。
public class Person
{
private Arm arm; //instance variable
public Person(Arm arm) //Constructor
{
this.arm = arm;
}
}-
public class Arm
{
private int fingers; //instance variable
public Arm(int fingers) //Constructor
{
this.fingers = fingers;
}
public int getFingers()
{
return this.fingers();
}
}每个Person对象都有一个Arm对象作为实例变量。每个Arm对象都有一个名为fingers的int实例变量。
访问fingers变量的正确方法是什么?
//in Person.java
public int getFingers()
{
return this.arm.getFingers(); //This is refrencing the getFingers() method in the Arm class
}这样我就可以像这样访问它:
Arm myArm = new Arm(5);
Person me = new Person(myArm);
System.out.println(me.getFingers());因此,我可以使用来自getFingers类的Arm方法,如下所示:
Arm myArm = new Arm(5);
Person me = new Person(myArm);
System.out.println(me.getArm().getFingers())发布于 2015-07-07 14:38:06
通常情况下,我建议德米特定律在这里发挥作用。
如果我要写:
A a = new A();
D d = a.getB().getC().getD();然后,这将允许您从A实例访问A,但它实际上破坏了封装,并显示出A具有B、B有C等等。您可能会争辩说,这在您的情况下是多余的,因为您希望Person具有Arm。
另一种方法是考虑您真正希望顶层对象(Person)做什么,并告诉它为您做它。如果你想要手指,所以你可以告诉他们抓住一些东西(也许),那么:
person.pickUp(object)这个人可以自己决定如何去做(它可以选择一只手臂,或者在极端的情况下它的脚或嘴!)你不是自己动手,而是让对象为你做点什么。这就是OOP的真正意义所在。
发布于 2015-07-07 14:31:49
对于这类问题,没有最佳做法。
这取决于您喜欢向Person类的用户公开或隐藏什么。如果您想隐藏Person包含一个Arm的信息,请向类Person添加一个公共方法getFingers()。如果在外部公开Arm类没有问题,那么向类Person添加一个方法getArm()。
注意,公开Arm (如果Arm类中有一个方法setFinger() ),它可以从Person类的任何用户处使用。公开方法getFingers()阻止直接访问方法setFinger()的可能性
发布于 2015-07-07 14:35:03
选项1:person.getArmFingers(),如果您根本不想公开arm对象,并且希望通过Person对象进行所有交互,则非常有用。但是,请记住,添加到arm中的每个属性(如hasHair :)现在都需要通过Person包装,这从长远来看可能是不可取的。如果要使用此方法,请考虑将Arm对象包设置为私有。
选项2:使用person.getArm().getFingers()。这将公开Arm对象,但不需要通过Person访问每个arm属性。这可能是不可取的情况下,手臂本身没有意义,而不是一个人的一部分。
所以你的问题的答案是:这取决于
https://stackoverflow.com/questions/31271382
复制相似问题