Я читал около class fromal parameters и возникает вопрос, почему следующий код плохо сформирован?Внутреннее классное строительство в Java
класс A
:
package org.gradle;
public class A extends B.Inner{
public A(B s){
s.super(new B()); //error
s.super(); //OK
}
}
класс B
:
package org.gradle;
public class B{
public class Inner{
}
}
Ключевая часть того, что было сказано есть:
Конструктор незакрытом внутреннего класса членов неявно объявляет в качестве первого формального параметра переменную, представляющую немедленно ограждающих экземпляр класса
Итак, я полагаю, что, кроме конструктора по умолчанию, мы должны иметь конструктор со следующей подписью:
Inner(B b);
Почему нет?
Спасибо, но не совсем понятно, почему я не могу явно вызвать этот конструктор, скажем, следующим образом: http://ideone.com/igXgCM? Может ли JLS предоставить ограничения, которые я потерял? –
@ St.Antario: Это не то, как работают внутренние классы - вы должны использовать 'new B(). Вместо этого вместо этого нужно использовать новый Inner(). Вы не должны думать об этом как о дополнительном параметре - вы должны думать об этом как о экземпляре окружающего класса, используемого для построения экземпляра внутреннего класса. –
Указывает ли JLS это экскрементно? –