匿名内部类:
new 接口名/抽象类名(){
//重写接口或者抽象类中的方法
}
就意味着JVM在运行过程中做了几件事:
1、JVM内部自己创建一个类
2、这个类实现一个接口或者继承了一个抽象类
3、将这个类的对象创建出来
interface Inter1{ //定义一个接口
void fun1();
}
class InterImpl implements Inter1{ //一个具体实现该接口的类
public void fun1(){
System.out.println("今天上课很开心");
}
}
class Demo{
public void fun2(Inter1 inter1){ //将接口名作为一个参数类型,传入的值必须是一个具体实现该接口的类
inter1.fun1(); //该对象调用具体实现该接口的子类重写的fun1方法
}
}
public class NiMingClassDemo1 {
public static void main(String[] args) {
Demo demo = new Demo(); //创建一个Demo对象
demo.fun2(new InterImpl()); // 基本用法(这么做很麻烦):用对象去调用里面的方法,方法里面传入具体实现该接口的子类的对象
之前我们的写法是这样的,但是这样很麻烦,当我实现这个接口里面的方法使用不同,那我需要自己再去写一个类去实现这个方法并进行重写
这时候我们就可以使用内部类,如下:
demo.fun2(new Inter1() { //高级用法:使用匿名内部类,调用该方法时括号里面传入该接口名的对象+回车,就相当于创建了一个具体实现该子类的对象
@Override
public void fun1() {
System.out.println("今天上课不开心");
}
});
标签:fun1,内部,void,Inter1,接口,匿名,new,public
From: https://www.cnblogs.com/ndmtzwdx/p/18436480