Обратите внимание, что подпись анонимного конструктора может ссылаться на недоступный тип (например, если такой тип встречается в сигнатуре). конструктора суперкласса cs). Само по себе это не вызывает каких-либо ошибок ни во время компиляции, ни во время выполнения.
Я попытался создать для этого пример — и получилось вот что:
Код: Выделить всё
.
└── com
└── example
├── inaccessible
│ └── InaccessibleType.java
├── subclass
│ └── SubClass.java
└── superclass
└── SuperClass.java
-> InaccessibleType.java
Код: Выделить всё
package com.example.inaccessible;
public class InaccessibleType {
public void display() {
System.out.println("InaccessibleType instance");
}
}
Код: Выделить всё
package com.example.superclass;
// Importing the superclass
import com.example.inaccessible.InaccessibleType;
public class SuperClass {
public SuperClass(InaccessibleType it) {
it.display();
}
}
Код: Выделить всё
package com.example.subclass;
import com.example.superclass.SuperClass;
public class SubClass {
public static void main(String[] args) {
// Creating an anonymous class that extends SuperClass
SuperClass instance = new SuperClass(new InaccessibleType() {
// This anonymous class does not have access to InaccessibleType
}) {
// Anonymous constructor referring to InaccessibleType
// No errors here even though InaccessibleType is inaccessible
};
}
}
Код: Выделить всё
javac com/example/inaccessible/*.java com/example/subclass/*.java com/example/superclass/*.java ─╯
com/example/subclass/SubClass.java:8: error: cannot find symbol
SuperClass instance = new SuperClass(new InaccessibleType() {
^
symbol: class InaccessibleType
location: class SubClass
1 error
Подробнее здесь: https://stackoverflow.com/questions/791 ... he-superty