匿名内部类,即没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,用完一次即可被回收,不占用内存。
但使用匿名内部类有个前提条件:必须继承一个父类或实现一个接口,但最多只能继承一个父类,或实现一个接口,即单继承和单实现。
下面是关于类中 形参是接口类型的引用 的方法的调用
先定义一个接口,接口里面有show方法
public interface AnonymousInterface {
/**
* 自定义抽象方法
*/
void show();
}
定义一个类
public class AnonymousTest {
/**
* 自定义静态方法实现将参数指定接口类型的引用传递出去,并调用show方法
*/
public static void test(AnonymousInterface anonymousInterface){
anonymousInterface.show();
}
}
public static void main(String[] args) {
//如何实现test方法的调用?????
// AnonymousTest.test(new AnonymousInterface()); //接口不能new对象,这样写程序会报错
方法一:自定义一个实现该接口的实现类,然后创建该类对象作为实参传递
public class AnonymousInterfaceImpl implements AnonymousInterface{
@Override
public void show() {
System.out.println("我是匿名内部类的实现类");
}
}
public class AnonymousTest {
/**
* 自定义静态方法实现将参数指定接口类型的引用传递出去,并调用show方法
*/
public static void test(AnonymousInterface anonymousInterface){
anonymousInterface.show();
}
public static void main(String[] args) {
//如何实现test方法的调用?????
// AnonymousTest.test(new AnonymousInterface()); //接口不能new对象,这样写程序会报错
//方法一:自定义一个实现该接口的实现类,然后创建该类对象作为实参传递
//接口不能new对象,所以要先创建一个接口的实现类
AnonymousInterfaceImpl anonymousInterface=new AnonymousInterfaceImpl();
//用类名.的方式调方法
AnonymousTest.test(anonymousInterface);
System.out.println("---------------------------------------------");
//或者直接在形参里面new对象
AnonymousTest.test(new AnonymousInterfaceImpl());
}
}
运行截图
方法二:采用匿名内部类的方式实现
模板: 接口/父类类型 引用变量 = new 接口/父类类型(){方法体} ;
其本质就是采用接口类型的引用指向匿名内部类的对象
public class AnonymousTest {
/**
* 自定义静态方法实现将参数指定接口类型的引用传递出去,并调用show方法
*/
public static void test(AnonymousInterface anonymousInterface){
anonymousInterface.show();
}
public static void main(String[] args) {
//如何实现test方法的调用?????
// AnonymousTest.test(new AnonymousInterface()); //接口不能new对象,这样写程序会报错
//方法二:采用匿名内部类的方式实现
//本质上就是采用接口类型的引用指向匿名内部类的对象
AnonymousInterface anonymousInterface1=new AnonymousInterface() {
@Override
public void show() {
System.out.println("匿名内部类真神奇!");
}
};
test(anonymousInterface1);*/
}
}
运行截图
方法三:使用Java8中的新特性lambda表达式的方式实现
模板: 接口 引用变量 = (参数列表)->{方法体};
//方法三:使用Java8中的新特性lambda表达式的方式实现
//模板: 接口 引用变量 = (参数列表)->{方法体};
AnonymousInterface anonymousInterface2 = ()->{
System.out.println("新特性的方式有点难");
};
test(anonymousInterface2);
代码汇总
public class AnonymousTest {
/**
* 自定义静态方法实现将参数指定接口类型的引用传递出去,并调用show方法
*/
public static void test(AnonymousInterface anonymousInterface){
anonymousInterface.show();
}
public static void main(String[] args) {
//如何实现test方法的调用?????
// AnonymousTest.test(new AnonymousInterface()); //接口不能new对象,这样写程序会报错
//方法一:自定义一个实现该接口的实现类,然后创建该类对象作为实参传递
//接口不能new对象,所以要先创建一个接口的实现类
AnonymousInterfaceImpl anonymousInterface=new AnonymousInterfaceImpl();
//用类名.的方式调方法
AnonymousTest.test(anonymousInterface);
System.out.println("---------------------------------------------");
//或者直接在形参里面new对象
AnonymousTest.test(new AnonymousInterfaceImpl());
System.out.println("---------------------------------------------");
//方法二:采用匿名内部类的方式实现
//本质上就是采用接口类型的引用指向匿名内部类的对象
AnonymousInterface anonymousInterface1=new AnonymousInterface() {
@Override
public void show() {
System.out.println("匿名内部类真神奇!");
}
};
test(anonymousInterface1);
//方法三:使用Java8中的新特性lambda表达式的方式实现
//模板: 接口 引用变量 = (参数列表)->{方法体};
AnonymousInterface anonymousInterface2 = ()->{
System.out.println("新特性的方式有点难");
};
test(anonymousInterface2);
}
}
整体运行截图
码字不易,若有帮助,点个赞吧