假设我定义了一个类,该类具有与其自身相同类型的变量作为成员.
public class abc {
private abc p;
}
Run Code Online (Sandbox Code Playgroud)
这实际上是有效的,令我惊讶.
为什么我认为它不应该:创建一个实例abc,它包含一个类型的变量abc,其中包含一个类型的变量abc,其中包含一个类型的变量abc,其中.....
显然我错了,有人可以告诉我如何?
我做了以下,一段时间后我得到了stackoverflow错误,我明白为什么会这样.
public class Cat {
String name="default name";
Cat insideCat;
public Cat(){
System.out.println("Cat constructor");
insideCat = new Cat();
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果我不在构造函数中创建一个新的Cat对象,但是获取Cat类型的参数并将其分配给insideCat字段.
public class Cat {
String name="default name";
Cat insideCat;
public Cat(Cat insideCat){
System.out.println("Cat constructor");
this.insideCat = insideCat;
}
}
Run Code Online (Sandbox Code Playgroud)
我只是在玩代码,只是试图找出Java可以做什么,不能做什么.在第二个代码中,一切看起来都很正常,直到我开始测试这个类.我需要一个Cat对象来创建一个Cat对象(并且为了创建这个Cat对象,我需要另一个Cat对象......它继续).所以从技术上讲,我无法测试这门课程.
所以我的问题是为什么java允许创建自己类型的实例变量?我想构造函数的整个目的是初始化它的实例变量.所以要么我必须创建一个新对象来初始化insideCat,否则我必须从外面获取Cat对象.两者似乎都不起作用.
我在这里想念的是什么 是否存在其自身类型的实例变量可以变得有用的情况,并且可以毫无问题地使用?想出这样的课程是不是很糟糕的OOP练习?
请考虑以下示例
public class Human
{
public Human h1;
public String name;
public int age;
public Human()
{
name = "myName";
age = 22;
}
}
Run Code Online (Sandbox Code Playgroud)
在那里有一个h1有什么意义?它怎么用?为什么会被使用?我们不能只使用我们用新创建的实例吗?