2015-04-07 2 views
1
public class Outer{ 
    public void sayHello(){ System.out.println("Hello!");} 
    public class Inner implements HelloSayers{} 
public interface HelloSayers{ 
    public void sayHello(); 
} 

Тип Outer.Inner должен реализовывать унаследованный абстрактный метод HelloSayers.sayHello().Почему внутренний класс вынужден реализовать свои интерфейсные методы, даже если у него есть внешний класс?

Но проблема заключается в том, что внутренний класс следует рассматривать как исполнитель внешних методов. Я ошибаюсь?

ответ

2

Да, вы ошибаетесь.

Inner может доступ члены Outer, но это не означает, что она разделяет эти элементы.

I.e. каждый экземпляр Inner содержит ссылку на соответствующий объект Outer (Outer.this). Если вы получаете доступ к члену Outer от Inner в вашем Java-коде, компилятор просто переводит его на доступ к члену Outer, на который ссылается объект Inner. Класс Inner не содержит этих членов.

Смежные вопросы