正如@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
創建,創建類的實例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'中的一個實例變量。 – MadProgrammer
「我認爲是因爲USBtoUSART serial = new USBtoUSART(ap); sequence。」 刪除線,你會確定。 –