Quando si annullano i metodi non è possibile ridurre la visibilità del metodo ereditato. Secondo la tabella che segue, protected
è più accessibile rispetto no modifier
:Metodo di sovrascrittura che non ha modificatore di accesso con modificatore di accesso protetto
| Class | Package | Subclass | World ————————————+———————+—————————+——————————+——————— public | y | y | y | y ————————————+———————+—————————+——————————+——————— protected | y | y | y | n ————————————+———————+—————————+——————————+——————— no modifier | y | y | n | n ————————————+———————+—————————+——————————+——————— private | y | n | n | n y: accessible n: not accessible
Ma quando cerco di ignorare f()
(vedi SubClass) tanto sono l'errore:
non può ridurre la visibilità del metodo ereditato da MyInterface.
Il metodo in MyInterface non ha modificatore di accesso e quello in SubClass è protetto, quindi più accessibile. Cosa mi manca qui?
public interface MyInterface {
void f();
}
public abstract class MyClass {
protected abstract void f();
}
public class SubClass extends MyClass implements MyInterface{
protected void f() { }
}
Non * sovrascrive * i metodi di interfaccia. Voi * li implementate. –
@TJCrowder - [jls jargon] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.8.1) - un metodo di istanza mC dichiarato in classe C, * sovrascrive * un altro metodo mI dichiarato in una superinterfaccia, iff ... – ZhongYu
@ bayou.io: Interessante, non l'ho mai sentito dire in questo modo. –