0

我想知道在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 行)。

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

谢谢!!

4

3 回答 3

2

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

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

如果您想Driver知道Car它属于哪个部分,则需要有一个字段Driver来表示该信息,然后通过(例如)将其传递this给构造函数Car来设置它。Driver不过要小心 - 允许this构造函数中转义(您从构造函数调用构造函数)可能很危险,因为您在对象完全初始化之前宣传它的存在。DriverCar

于 2012-07-26T20:57:13.047 回答
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

}
于 2012-07-26T20:59:17.307 回答
0

其他人已经回答了你的问题。我只想指出,public数据成员在面向对象编程中被认为是一件坏事(TM)。正如弗朗西斯科所说明的那样,您应该改用 getter 和 setter,并更改成员变量本身以进行private访问。

话虽如此,我相信你的设计不是最好的。Driver为什么要计算汽车的面积?Car 不应该负责计算自己的面积,特别是因为它已经知道它的宽度和长度吗?如果您以这种方式设计代码,您将完全消除导致原始问题中问题的问题。

于 2012-07-26T21:07:17.400 回答