有人可以帮助我,请在Java中正确扩展我的方法USBtoUSART吗? 我设法扩展它,但我有问题,创建一个新的子类实例。
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的子类,但是我收到应用程序的错误消息会崩溃。我想因为USBtoUSART串口=新的USBtoUSART(ap);序列
感谢您的帮助,它让我活着......
答案 0 :(得分:0)
正如@MadProgrammer已经说过:你不能创建一个类的新对象,该类将子类保存为字段并对其进行初始化。这将创建StackOverflowError
,因为您引入了循环依赖。
请考虑以下示例:
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
的创建都会返回StackOverflowError
,因为它们都会构造类A
,创建类{{1}的实例创建类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
但我不知道这是否适用于您的情况。