首页 > 编程语言 >Java的匿名内部类

Java的匿名内部类

时间:2022-10-11 21:38:30浏览次数:57  
标签:Java 内部 void public Person 匿名 class eat


匿名内部类也就是没有名字的内部类

 

正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

 

实例1:不使用匿名内部类来实现抽象方法

abstract          class          Person{        
public abstract void eat();
}

class Child extends Person {
public void eat() {
System.out.println( "eat something" );
}
}

public class Demo {
public static void main(String[] args) {
Person p = new Child();
p.eat();
}
}


运行结果:eat something

可以看到,我们用Child继承了Person类,然后实现了Child的一个实例,将其向上转型为Person类的引用

但是,如果此处的Child类只使用一次,那么将其编写为独立的一个类岂不是很麻烦?

这个时候就引入了匿名内部类

 

实例2:匿名内部类的基本实现

abstract​          class​          Person{        
public​ abstract​ void​ eat();
}

public​ class​ Demo {
public​ static​ void​ main(String[] args) {
Person p = new Person() {
​public void eat() {
​System.out.println("eat something");
​}
​};
p.eat();
}
}


运行结果:eat something

可以看到,我们直接将抽象类Person中的方法在大括号中实现了

这样便可以省略一个类的书写

并且,匿名内部类还能用于接口上

 

实例3:在接口上使用匿名内部类


interface Person {
public void eat();
}

public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("eat something");
}
};
p.eat();
}
}

 


 


运行结果:eat something

 

由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现

最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口

 

实例4:Thread类的匿名内部类实现


public class Demo {
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
}
};
t.start();
}
}

运行结果:1 2 3 4 5


 

实例5:Runnable接口的匿名内部类实现

public class Demo {
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
}
};
Thread t = new Thread(r);
t.start();
}
}

 

运行结果:1 2 3 4 5

 

 

 

 

标签:Java,内部,void,public,Person,匿名,class,eat
From: https://blog.51cto.com/u_15785643/5748021

相关文章

  • java中的泛型总结
    要我直接说出泛型是个what我还真讲不出来,这里先由一道问题引入:定义一个坐标点类,要求能保存各种类型的数据,如:整形,浮点型,和字符串类型既然变量类型起先不确定,那么很容易想到......
  • JAVA的内部类
    内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的......
  • idea javaWeb tomcat报Driver ClassNotFoundException解决办法
    1.在WEB-INF目录下创建lib目录(如果没有的话),再接着将mysql-connection的jar报复制过来放到lib目录下  2.再点击file-ProjectStructure-Modules,接着点击右上角......
  • Javaweb学习 -----------------操作数据库中的数据
    1、添加数据 insertinto表名(列名1,列名2,...)values(值1,值2,...);//给指定列添加数据insertinto表名values(值1,值2,...);......
  • Javaweb学习 ------------------操作表
    1、查询表showtables;//查询当前数据库下所有表的名称desc表名称;//查询当前表中各个字段的结构属性2、创建表createtable表名(字段名1数据类......
  • 15、JAVA入门——封装
    目录​​ 一、封装​​​​      1、封装概述​​​​   2、封装的步骤​​​​二、Java里的包​​​​      1、包的概述​​​​      2、包的......
  • 14、Java——迷你图书管理器(对象+数组)
    ​ 目录​​⛳️项目需求​​​​⛳️覆盖知识​​​​⛳️开发思路 ​​​​⛳️开发步骤​​​​❤️1、数据初始化​​​​❤️2、BookMethod类中定义各种方法​​​​⛳️部......
  • 18、JAVA入门——接口
    目录​​❤️ 1、生活中的接口​​​​❤️ 2、定义和实现一个简单的接口​​​​❤️ 3、更复杂的接口​​​​❤️ 4、使用接口的优势​​​​❤️ 5、抽象类VS接口​​......
  • 15、Java——迷你图书管理器(变量+数组)
    目录​​⛳️项目需求​​​​⛳️覆盖知识​​​​⛳️开发思路 ​​​​⛳️开发步骤​​​​❤️1、数据初始化​​​​❤️2、实现查看图书信息​​​​❤️3、实现新增图书信......
  • 21、JAVA进阶——集合(2)
    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。......