4)匿名内部类
顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字。
匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:
只用到类的一个实例。
● 类在定义后马上用到。
● 类非常小(SUN推荐是在4行代码以下)
● 给类命名并不会导致你的代码更容易被理解
在使用匿名内部类时,要记住以下几个原则:
● 匿名内部类不能有构造方法。
● 匿名内部类不能定义任何静态成员、方法和类。
● 匿名内部类不能是public,protected,private,static。
● 只能创建匿名内部类的一个实例。
● 一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
● 因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
A、继承式的匿名内部类和接口式的匿名内部类。
- import java.util.Arrays;
- import java.util.Comparator;
-
-
- public class AnnInnerClass {
-
- public static void main(String[] args) {
-
- Yoo yoo = new Yoo();
- Yoo y1 = new Yoo(){};
-
-
-
-
-
- Yoo y2 = new Yoo(){
- public String toString(){
- return "y2";
- }
- };
- System.out.println(y2);
-
-
-
-
- final int b = 5;
- Xoo xoo = new Xoo(){
- public int add(int a){
- return a+b;
- }
- };
- System.out.println(xoo.add(5));
-
- Comparator<String> byLength = new Comparator<String>(){
- public int compare(String o1,String o2){
- return o1.length()-o2.length();
-
- }
- };
- String[] names = {"Andy","Tom","Jerry"};
- Arrays.sort(names,byLength);
- System.out.println(Arrays.toString(names));
-
- Arrays.sort(names,new Comparator<String>(){
- public int compare(String o1,String o2){
- return o1.length()-o2.length();
- }
- });
- }
-
- }
|