[英]Accessing fields of an object from the object that is a field in the first object
我想知道在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可以实现吗? 如果没有,那么这个问题的最佳概念解决方案是什么?
谢谢!!
如果我理解你的问题......
不,没有办法从Driver
的实例向后导航到有一个driver
字段引用它的Car
。 毕竟,可能有几个这样的Car
实例,或者根本没有。
如果您希望Driver
知道它所属的Car
,您需要在Driver
有一个字段来表示该信息,然后通过(例如)将this
从Car
传递给Driver
构造函数来设置它。 但要小心 - 允许this
在构造函数中转义(从Car
构造函数中调用Driver
构造函数)可能很危险,因为在完全初始化之前,您正在宣传对象的存在。
您需要引用第一个对象。 你可以这样做:
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
}
其他人已经回答了你的问题。 我想指出public
数据成员被认为是面向对象编程中的Bad Thing(TM)。 正如Francisco所示,您应该使用getter和setter,并将成员变量本身更改为private
访问。
话虽如此,我相信你的设计不是最好的。 为什么司机计算汽车的面积? 汽车是否应该负责计算自己的区域,特别是因为它已经知道它的宽度和长度? 如果您以这种方式设计代码,则可以完全删除导致原始问题出现问题的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.