Java 如何编写子类的新实例

Java 如何编写子类的新实例,java,swing,constructor,subclass,superclass,Java,Swing,Constructor,Subclass,Superclass,有人能帮我在Java中正确扩展我的方法USBTOUSAT吗? 我设法扩展了它,但我有一个问题,创建了一个新的子类实例 public class USBtoUSART extends DesktopApplication1View implements SerialPortEventListener{ public USBtoUSART(SingleFrameApplication app){ super(app); } } public class Des

有人能帮我在Java中正确扩展我的方法USBTOUSAT吗? 我设法扩展了它,但我有一个问题,创建了一个新的子类实例

public class USBtoUSART extends DesktopApplication1View implements SerialPortEventListener{
   public USBtoUSART(SingleFrameApplication app){
        super(app);    
   }
}


public class DesktopApplication1View extends FrameView {
    SingleFrameApplication ap;
    USBtoUSART serial = new USBtoUSART(ap);

    public DesktopApplication1View(SingleFrameApplication app) {      
        super(app);
    }
}

我希望USBtoUSART是DesktopApplication1View的一个子类,但我收到应用程序将崩溃的错误消息。我想是因为USBTOUSAT系列=新的USBTOUSAT(ap);顺序


谢谢你的帮助,我快被活活吃掉了

正如@MadProgrammer已经说过的:您不能创建一个类的新对象,该类将子类作为字段保存并初始化它。这将创建一个
StackOverflowerError
,因为您引入了循环依赖关系

考虑以下示例:

public class A {
    C c;
    B b = new B(c);

    public A(C c) {
        System.out.println("A constructor");
    }
} 

public class B extends A {
    public B(C c) {
        super(c);
    }
}

public class C {

}

public class Test {
    public static void main(String[] args) {
        new A(new C());
//      new B(new C());
    }
}
新建
a
和新建
B
都将返回
StackOverflowerError
,因为它们都将构造类
a
,该类创建类
B
的实例,该类创建类
a
的实例,等等

编辑以使用您的示例:

public class USBtoUSART extends DesktopApplication1View implements SerialPortEventListener{
   public USBtoUSART(SingleFrameApplication app){
        super(app);    
   }
}


public class DesktopApplication1View extends FrameView {
    SingleFrameApplication ap;

    public DesktopApplication1View(SingleFrameApplication app) {      
        super(app);
    }
}

public static void Main(string[] args){
 USBtoUSART serial = new USBtoUSART(new SingleFrameApplication());
}
这将发生:

  • serial
    定义为
    USBtoUSART
  • 实例化一个新的
    USBtoUSART
    对象。这将执行以下操作:
  • 输入
    USBtoUSART的构造函数
  • 输入其超类的构造函数,
    DesktopApplication1View
  • 输入其超类的构造函数,
    FrameView
  • 同时,参数
    SingleFrameApplication
    将传递给每个构造函数

    听起来好像您的总体架构设置是错误的。您是否希望扩展
    SingleFrameApplication
    ?如果希望实例化
    USBtoUSART
    ,则必须在构造函数中使用参数

    或者,执行以下操作:

    public class USBtoUSART extends DesktopApplication1View implements SerialPortEventListener{
           public USBtoUSART(){
                super(new SingleFrameApplication());    
           }
    }
    
    public static void Main(string[] args){
     USBtoUSART serial = new USBtoUSART();
    }
    

    但我不知道这是否适用于您的情况。

    请发布您收到的错误消息或异常堆栈跟踪。
    USBtoUSART
    无法从
    DesktopApplication1View
    扩展,并且不能作为
    DesktopApplication1View
    中的实例变量。我认为这是因为USBtoUSART serial=new USBtoUSART(ap);sequence.“删除行,你就会确定。父母如何使用孩子的功能-你有鸡和蛋的问题。在正确定义父对象之前,子对象不能被定义,因此最终会出现这样的情况,即父对象和子对象都不能被定义,因为它们现在相互依赖other@MadProgrammer,对不起-我有一个遗传相关的大脑放屁。我一发表评论就意识到了这个问题。好吧,我明白了。那么如何从USBTOUSAT访问DesktopApplication1View方法呢?抱歉,我是Java的新手。@comeback:只要方法声明为
    public
    protected
    ,您就可以像使用同一类一样使用它们。只需创建一个新的
    USBtoUSART
    ,删除循环依赖项(
    USBtoUSART serial=new-USBtoUSART(ap);
    ),您就可以使用这些方法了。好的,但我不能创建新对象,因为我必须使用USBtoUSART serial=new-USBtoUSART();。但是USBtoUSART的构造函数有一个参数,我不知道如何使用它,因为它又是SingleFrameApplication。@返回:您导入了
    SingleFrameApplication
    ?你确定它有一个无参数构造函数吗?