酷比Children 2021-10-25 14:36 采纳率: 0%
浏览 6

浅谈匿名内部类,希望帮助正在困惑的你!!

1.匿名内部类

在java中,如果该方法的参数 是一个接口类型,除了可以传入一个参数接口的实现类,还可以使用匿名内部类来作为该方法的参数,匿名内部类其实就是没有名称的内部类,在调用包含参数接口类型的方法时,通常为了简化代码,不会创建一个接口的实现类作为方法的传入,而是直接通过匿名内部类的形式传入一个接口类型参数

2.语法格式 

new 父接口(){

//匿名内部类实现部分; 

 (1)不使用匿名内部类的写法

package pack;

interface Anmail {
	void shout();
}

class Mycat implements Anmail {
	String name = "小花";
	@Override
	public void shout() {
		// TODO Auto-generated method stub
		System.out.println(name + "喵喵喵");
	}

}

public class Example01 {
	public static void main(String[] args) {

		anmailshout(new Mycat());
	}

	private static void anmailshout(Anmail an) {
		// TODO Auto-generated method stub
		an.shout();
	}
}

 

public class Example01 {
    public static void main(String[] args) {

        anmailshout(new Mycat());
    }

    private static void anmailshout(Anmail an) {
        // TODO Auto-generated method stub
        an.shout();
    }
}
这一块代码定义了anmailshout的方法,该方法是静态方法,随着类的加载而加载,当该方法的参数是接口类型,这是我们就应该思考,如何对这个接口类型参数实例化,因为学习接口的时候我们已经了解到,接口里面是抽象方法,接口是不能直接实例化的,即

Anmail an=new  Anmail();是错误的

所以我们需要一个类实现接口,然后创建这个类的对象作为参数,

Anmail an=new Mycat();当然这个里面也涉及了一个多态方面的向上转型问题。

 

如果写代码未免会有点太过于繁琐,所以我们引出了匿名内部类。 

package pack;

interface Anmail {
	void shout();
}

public class Example01 {
	public static void main(String[] args) {
		String name = "小花";
		anmailshout(new Anmail() {
			@Override
			public void shout() {
				// TODO Auto-generated method stub
				System.out.println(name + "喵喵喵");
			}
		});
	}

	private static void anmailshout(Anmail an) {
		// TODO Auto-generated method stub
		an.shout();
	}
}

所以大家不要把new Anmail()看做接口对象的实例化,其实这只是匿名内部类的一种写法。 

  • 写回答

1条回答 默认 最新

  • zlebhs 2021-10-25 14:38
    关注

    发错地方了

    评论

报告相同问题?

问题事件

  • 创建了问题 10月25日

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算