用匿名内部类就是为了简化开发:接口的实现,需要一个新类来实现接口,为了避免创建新的类,直接采用匿名内部类,简化开发
package innerClass01;
/**
* @author QinYingjie
* @version 1.0
*/
public class InnerClass02 {
public static void main(String[] args) {
Outer02 outer02 = new Outer02();
outer02.method();
}
}
//匿名内部类的理解
//说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名
//使用匿名内部类就是为了简化开发:接口的实现,需要一个新类来实现接口,为了避免创建新的类,直接采用匿名内部类,简化开发
//1.匿名内部类的基本语法
//new 类/接口(参数列表){
// 类体
// }
//
//匿名内部类:1.本质是类,2.内部类,3.该类没有名字(其实是有名字,底层是系统分配)4.同时还是一个对象
class Outer02
{
private int n1 = 10;
public void method()
{
//基于接口的匿名内部类
/**
* 底层
* class xxxx implements A
* {
* @override
* public void cry()
* {
* System.out.println("老虎叫换...")
* }
*
*/
A a =new A()
{
@Override
public void cry() {
System.out.println("老虎哭泣...");
}
};
a.cry();
System.out.println("a的运行类型:"+a);
// 基于类的匿名内部类
// 1.不能添加访问修饰符,因为它的地位就是一个局部变量
// 2.作用域:仅仅在定义它的方法或代码块中
// 3.外部其他类不能访问匿名内部类,匿名内部类地位相当于一个局部变量
// 8.如果外部类和匿名内部类的成员重名时,匿名内部类访问的话,默认遵守就近原则
// 如果想访问匿名内部类的成员,可以使用(外部类名.this.匿名内部类的成员)
Father father = new Father("jjj"){
private int n1 = 200;
public void test()
{
System.out.println("父亲类在测试");
}
};
System.out.println("father运行类型是:"+father);
System.out.println(n1);
}
}
interface A{
public void cry();
}
class Father{
public Father(String name){
}
public void test()
{
}
}