【Java面接問題】13 Anonymous Inner Class(匿名内部クラス)他のクラスをextends(継承)できますか?implements(実装)interface(インタフェース)できますか?
1202 ワード
1.匿名の内部クラスとは?
内部クラスは、別のクラスの内部に存在するクラスであり、匿名の内部クラスは、その名の通り、名前のない内部クラスである.
2.なぜ匿名の内部クラスが必要なのですか?
各内部クラスは、実装クラスをそれぞれ継承することができる.したがって、内部クラスは、外部クラスがインプリメンテーションクラスを継承しているかどうかに制限されません.Inner classが提供する「複数の特定のクラス(concrete)または抽象(abstract)クラスから継承する」能力が少なくなると、設計上およびプログラミング上のいくつかの問題が難しくなります.
だから、ある角度からinner classを見ると、多重継承問題の完全な解決策と言える.interfaceはその一部の問題を解決することができるが、inner classesは「マルチインプリメンテーション継承(multiple implementation)」を効果的かつ実際に許可することができる.すなわち、inner classesは実際に複数のnon-interfaceを継承することを許可します.このレベルで内部クラスを使用する場合は,親クラスや継承インタフェースによってインスタンス化や初期化が行われるのが一般的であるが,3に示すように内部クラスの名前が余分であるため匿名の内部クラスが用いられる.
3.匿名の内部クラスをどのように実現しますか?
匿名の内部クラスの実装は、インタフェースなどの非常に簡単です.
インタフェースAの実装クラスのオブジェクトを得るには、次の文を書くことができます.
その中の
匿名の内部クラスを定義します
4.質問の答え
以上から分かるように、匿名の内部クラスは、実装時に1つのクラスまたはインタフェースを借りなければならず、この階層では他のクラスを継承しても実装してもよいインタフェースであるが、
内部クラスは、別のクラスの内部に存在するクラスであり、匿名の内部クラスは、その名の通り、名前のない内部クラスである.
2.なぜ匿名の内部クラスが必要なのですか?
各内部クラスは、実装クラスをそれぞれ継承することができる.したがって、内部クラスは、外部クラスがインプリメンテーションクラスを継承しているかどうかに制限されません.Inner classが提供する「複数の特定のクラス(concrete)または抽象(abstract)クラスから継承する」能力が少なくなると、設計上およびプログラミング上のいくつかの問題が難しくなります.
だから、ある角度からinner classを見ると、多重継承問題の完全な解決策と言える.interfaceはその一部の問題を解決することができるが、inner classesは「マルチインプリメンテーション継承(multiple implementation)」を効果的かつ実際に許可することができる.すなわち、inner classesは実際に複数のnon-interfaceを継承することを許可します.このレベルで内部クラスを使用する場合は,親クラスや継承インタフェースによってインスタンス化や初期化が行われるのが一般的であるが,3に示すように内部クラスの名前が余分であるため匿名の内部クラスが用いられる.
3.匿名の内部クラスをどのように実現しますか?
匿名の内部クラスの実装は、インタフェースなどの非常に簡単です.
Interface A{
public void method();
}
インタフェースAの実装クラスのオブジェクトを得るには、次の文を書くことができます.
A a = new A() {
public void method() {
System.out.println("hehe");
}
};
その中の
{
public void method(){
System.out.println("hehe");
}
};
匿名の内部クラスを定義します
4.質問の答え
以上から分かるように、匿名の内部クラスは、実装時に1つのクラスまたはインタフェースを借りなければならず、この階層では他のクラスを継承しても実装してもよいインタフェースであるが、
extends
またはimplements
のキーワードを介しては不可能である.