首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类可以拥有自己类型的字段吗?

类可以拥有自己类型的字段吗?
EN

Stack Overflow用户
提问于 2015-04-09 18:43:47
回答 4查看 3.8K关注 0票数 8

我做了以下操作,过了一段时间后,我得到了一个堆栈溢出错误,我理解为什么会这样。

代码语言:javascript
运行
复制
public class Cat {
    String name="default name";
    Cat insideCat;

    public Cat(){
         System.out.println("Cat constructor");
         insideCat = new Cat();
    }

}

但是,如果我没有在构造函数中创建一个新的Cat对象,而是接受一个Cat类型的参数并将其赋值给insideCat字段,该怎么办?

代码语言:javascript
运行
复制
public class Cat {
    String name="default name";
    Cat insideCat;

    public Cat(Cat insideCat){
         System.out.println("Cat constructor");
         this.insideCat = insideCat;
    }

}

我只是在玩代码,只是想找出Java能做什么,不能做什么。在第二段代码中,一切看起来都很正常,直到我开始测试这个类。我需要一个Cat对象来创建一个Cat对象(要创建这个Cat对象,我需要另一个object...and )。所以从技术上讲我不能测试这门课。

因此,我的问题是,为什么java允许创建自己类型的实例变量?我猜构造函数的全部目的是初始化它的实例变量。所以,要么我必须创建一个新的对象来初始化insideCat,要么我必须从外部获取Cat对象。两者似乎都不起作用。

我在这里错过了什么。是否有任何情况可以使其自身类型的实例变量变得有用,并且可以毫无问题地使用?想出这样的课程是很糟糕的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-09 18:45:31

像这样的类一直存在。

考虑链接列表或树,例如,

代码语言:javascript
运行
复制
class ListNode {
  ListNode next;
  // Etc.
}

class TreeNode {
  TreeNode left;
  TreeNode right;
  // Etc.
}

您不会在构造函数中初始化“子”对象,稍后会添加它们。

在您的示例中,您需要有一个稍后创建insideCat的方法。通常,您不会创建具有完全相同状态的子对象,在构建时会有一些东西来区分它们,在这种情况下,您可以有一个“哦上帝停止创建这些对象”的条件,或者在添加它们时,例如,通过方法而不是在构造函数中添加它们。

票数 14
EN

Stack Overflow用户

发布于 2015-04-09 18:47:09

拥有同一个类的实例成员没有什么错。雇员有经理,经理也是雇员。

代码语言:javascript
运行
复制
 public class Employee{
     private Employee manager;
     //getters setters and constructor
 }
票数 3
EN

Stack Overflow用户

发布于 2015-04-09 18:47:57

有许多自引用数据结构的例子是有效的。想想LinkedList吧。每个LinkNode都有一个数据字段和一个指向下一个LinkNode的指针。

代码语言:javascript
运行
复制
class LinkNode {
    int data;
    LinkNode nextLink;

    public LinkNode(int d1) {
        data = d1;
        nextLink = null;
    }
    ...
}

class LinkedList {
    private LinkNode first;
...
}

您的StackOverflow问题源于这样一个事实,即创建一个替代X需要无限地创建另一个X,

只需考虑您的Cat示例。为什么要实例化猫要求所有的things...another Cat

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29546485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档