Как @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
и т.д.
Edit использовать пример:
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) ». Удалите линию, и вы будете уверены. –