匿名内部类是一种特殊的局部内部类,这种内部类没有类名。适用于只使用一次并且不需要多次创建对象的类。使用匿名内部类可以使类代码与创建对象同时完成,提高代码的可维护性与灵活性。
package JAVA_Project_01_05;
//匿名内部类是一种特殊的局部内部类,这种内部类没有类名。适用于只使用一次并且不需要多次创建对象的类。使用匿名内部类可以使类代码与创建对象同时完成,提高代码的可维护性与灵活性。
//使用匿名内部类的技术要点如下:
//
//· 匿名内部类的语法格式:“new实现的接口名或继承的类名(){};”。
//
//· 匿名内部类是惟一一种没有构造方法的类。所以匿名内部类的使用范围有限。大部分匿名内部类用于接口的回调。
//
//· 匿名内部类在编译时由系统自动起名为Out$1.class。
//
//· 匿名内部类用于继承其他类或实现接口,并不需要增加额外的方法,只是对继承方法的实现与重写。
interface AnonymityInter {//定义一个接口
public void method();
}
abstract class AnonymityAbstract {//定义一个抽象类
int count;
abstract void method();
}
class AnonymityClass {//定义一个类
public void method() {
System.out.println("这是一个普通的类");
}
}
public class TextAnonymity {//操作匿名内部类的类
public static void main(String[] args) {//Java程序主入口处
AnonymityInter inter = new AnonymityInter() {//实现接口的匿名内部类
public void method() {//实现接口中的方法
System.out.println("在匿名内部类中实现接口的方法");
}
};
inter.method();//调用方法
AnonymityAbstract aa = new AnonymityAbstract() {//实现抽象类的匿名内部类
{
count = (int) (10 * (Math.random() + 1));//随机获得数字
}
@Override
void method() {//重写方法
System.out.println("您的幸运数字是:" + count);
}
};
aa.method();//调用方法
AnonymityClass ac = new AnonymityClass() {//实现普通类的匿名内部类
public void method() {//覆盖类的方法
System.out.println("覆盖类的方法");
}
};
ac.method();//调用方法
}
}
/*
(1)在程序中包含用匿名内部类实现接口的方法、继承抽象类重写方法以及对普通类的方法进行重写。在重写抽象类的匿名内部类中,在语句中定义要初始化的数字需要将初始化的数字放入大括号中,否则编译不通过。
(2)在实现普通类的匿名内部类中,对method()方法进行重写,覆盖了原普通类中方法的实现。重写也称为覆盖,满足覆盖需要注意:覆盖的方法的返回值必须和被覆盖的方法的返回值一致;覆盖的方法所抛出的异常必须和被覆盖的方法所抛出的异常一致,或者是其子类;被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖;覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果。
*/