从作为第一个对象中的字段的对象访问对象的字段

时间:2012-07-26 20:53:09

标签: java object encapsulation

我想知道java是否有可能从它自己的一个对象本身的字段中访问该对象的字段。让我提供一个示例代码:

假设我有一个类(我在这里压缩代码,所以我知道所呈现的代码不会编译)

public class Driver{
// constructor
public Driver(){
}
// method
public double findArea(){
return ???; <<--line #1 in question  How do I get the length and width fields in here?
}
}// end driver class

public class Car{
 public double length; 
 public double width;
 public Driver me;
public Car(){
length=20.5;
width=11.2;
me = new Driver();
}
}

所以在主要部分,我们会有像

这样的东西
public static void main(String arg[]){

car = new Car();
car.me.findArea();  << ---line #2 in question
}

所以在问题的第2行中,将执行一个公共方法.findArea(),然后需要以某种方式接入调用对象的字段并提取数值(相关的第1行)。 / p>

通过Java可以吗?如果没有,那么这个问题的最佳概念解决方案是什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

如果我理解你的问题......

不,没有办法从Driver的实例向后导航到Car,其中driver字段引用它。毕竟,可能有几个这样的Car个实例,或者根本没有。

如果您希望Driver知道它属于哪个Car,您需要在Driver中有一个字段来表示该信息,然后设置它(比如说) )从this传递CarDriver构造函数。但是要小心 - 允许this在中转义构造函数(从Driver构造函数中调用Car构造函数)可能很危险,因为您正在做广告在对象完全初始化之前存在一个对象。

答案 1 :(得分:0)

您需要引用第一个对象。你可以这样做:

public class Driver {

    private Car car;

    public Driver(Car car){
        this.car = car;
    }

    public double findArea(){
        return car.getLength() * car.getWidth();
    }

}

public class Car {

    public double length; 
    public double width;
    public Driver me;

    public Car(){
        length=20.5;
        width=11.2;
        me = new Driver(this);
    }

    // getters and setters

}

答案 2 :(得分:0)

其他人已经回答了你的问题。我只想指出public数据成员被认为是面向对象编程中的Bad Thing(TM)。正如Francisco所示,您应该使用getter和setter,并将成员变量本身更改为private访问权限。

话虽如此,我相信你的设计不是最好的。为什么司机计算汽车的面积?汽车是否应该负责计算自己的区域,特别是因为它已经知道它的宽度和长度?如果您以这种方式设计代码,则可以完全删除导致原始问题出现问题的问题。