我想知道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可以吗?如果没有,那么这个问题的最佳概念解决方案是什么?
谢谢!
答案 0 :(得分:2)
如果我理解你的问题......
不,没有办法从Driver
的实例向后导航到Car
,其中driver
字段引用它。毕竟,可能有几个这样的Car
个实例,或者根本没有。
如果您希望Driver
知道它属于哪个Car
,您需要在Driver
中有一个字段来表示该信息,然后设置它(比如说) )从this
传递Car
到Driver
构造函数。但是要小心 - 允许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
访问权限。
话虽如此,我相信你的设计不是最好的。为什么司机计算汽车的面积?汽车是否应该负责计算自己的区域,特别是因为它已经知道它的宽度和长度?如果您以这种方式设计代码,则可以完全删除导致原始问题出现问题的问题。