public class Foo {
private String myString;
private Bar instanceOfNested;
public Foo() {
this.myString = "Hello, World!";
this.instanceOfNested = new Bar.Ham();
}
public abstract class Bar {
public class Ham extends Bar {
public Ham() {
System.out.println(Foo.this.myString);
}
}
}
}
Вышеприведенное выдает ошибку:
"требуется включающий экземпляр, содержащий Foo.Bar.Ham"
Я также пытался сделать this.instanceOfNested = this.new Foo.Bar.Ham()
и this.instanceOfNested = this.new Bar.Ham()
, однако, оба результата приводят к тому, что IDEA предоставляет сообщение «Невозможно разрешить символ« Foo »» и «Невозможно разрешить символ« Бар »соответственно (хотя компиляция возвращает« Ошибка: »(« ожидается ». это потому, что он ожидает конструктор, из которого находится Bar в операторе? Bar
должен быть абстрактным и, следовательно, не может быть создан, однако).
Насколько я понимаю, такое утверждение, как new Foo().new Bar.Ham()
, является требуется, однако, поскольку я создаю экземпляр из Foo
, я пытаюсь использовать this
.
Можно ли создать экземпляр Ham
в Foo
, сохраняя Bar
как абстрактные и нестати c, так и Ham
как нестати c и вложенные в Bar
?