java - 在父类(super class)构造函数中创建子类对象进入无限循环java

标签 java oop

这可能是个愚蠢的问题,但请暂时耐心等待。我有类似的东西:

     public class A{


    public A(){
        //Some statements here

        B bObj = new B(); //Goes in infinite loop this above statement

        (new Thread(bObj)).start();
        //Some statements here


    }

    public static void main(String[] args){
         A aObj = new A();

        }

    }
}

class B extends A implements Runnable{
    public testprint(){
        System.out.println("Inside testprint()");
    }
}

如果我在父类(super class)中创建一个子类对象,它会进入无限循环,因为我猜一旦创建了子类对象,它就会不断调用不断创建子类对象的父类(super class)构造函数。如果我在 main 中声明子类对象,我会得到类似“无法从静态上下文中引用非静态成员”的信息,因为我的父类(super class)对象尚未初始化。所以我不能在 main 中初始化我的子类对象。

那么处理这个问题的好方法是什么?

最佳答案

我看到有几件事是错误的。首先,根据评论,您不能在 B 的父类的构造函数中创建 B 的实例。那将是一个无限循环。

此外,我看到您称其为“new bObj”。我猜你是说 new B() 吧?

您想创建 B 的实例而不是 A,然后在 B 的构造函数中,当启动线程时,您希望将“this”传递给 Thread 对象,而不是尝试创建一个新实例。

最后,您真的不应该尝试在构造函数中启动线程。您实际上是将一个尚未完全构建的对象传递给 Thread 类。应在构造对象后启动它。

关于java - 在父类(super class)构造函数中创建子类对象进入无限循环java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19473856/

相关文章:

oop - 对象切片,这是优势吗?

java - 在堆中创建的抽象类的私有(private)实例变量在哪里?

java - 约束布局 beta 4 - fragment 不起作用

java - 使用 Selenium 的元素的存在

java - 如何使用 Files.createFile() 将数据写入新行?

java - JSONPath和Traverson过滤: single element array

java - 强制子类具有特定的工厂方法或构造函数

java - 用java编写一个简单的文字游戏。如何显示拾取的元素

java - 读取 java 属性文件,值始终为空

Javascript 原型(prototype)不会更新方法