匿名内部类的使用

匿名内部类的使用

为什么需要匿名内部类?

匿名内部类的作用:比如想要创建几个类,但是都只用一次。我们可以不再采用传统的步骤(新建一个类实现接口再重写方法),而是采用匿名内部类,来简化开发。

一、基于接口的匿名内部类

interface AI{	//一个接口ai

void cry( );

}

class Tiger implements AI{	//使用传统方法新建一个类实现接口

@override

pubilc void cry(){

system.out.println("老虎叫");

}

}

class outer {	//一个外部类

public void method(){   //一个方法
    
    Tiger tiger = new Tiger();  	//使用传统方法创建一个tiger并调用方法
    tiger.cry(); 
    
    AI taiger  = new AI(){		//采用匿名内部类实现
        @override 
        public void cry(){
            system.out.println("老虎叫");
        }
    }

}

}

那么匿名内部类的底层是什么东西呢

    AI taiger  = new AI(){		//采用匿名内部类实现
        @override 
        public void cry(){
            system.out.println("老虎叫");
        }
    }

///底层逻辑
	class outer$1 implements AI(){	//匿名内部类的名字就是外部类的名字加一个$
        @override 
        public void cry(){
            system.out.println("老虎叫");
        }
    }

二、基于类的匿名内部类

class Father {
    public Father (String name){	//构造器
        
    }
    public void test(){			    //方法
        
    }
}

class outer {	//一个外部类
    public void method(){   //一个方法
    
    Tiger tiger = new Tiger();  	//使用传统方法创建一个tiger并调用方法
    
    Father father = new Father("jack"){		//匿名内部类就是加个(大括号;)			
    };

}

他的底层逻辑就是

class outer$2 extends Father(){
    
}

new这个东西会返回一个对象,Father("jack"){ };创建了一个匿名内部类outer$2,然后被new返回给father。所以,father的编译类型是Father,运行类型是outer$2。

posted @ 2023-03-02 20:45  翰林猿  阅读(35)  评论(0编辑  收藏  举报