匿名内部类的一些看法

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

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

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

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

 1 abstract class Person {
 2     public abstract void eat();
 3 }
 4
 5 class Child extends Person {
 6     public void eat() {
 7         System.out.println("eat something");
 8     }
 9 }
10
11 public class Demo {
12     public static void main(String[] args) {
13         Person p = new Child();
14         p.eat();
15     }
16 }

运行结果:eat something

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

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

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

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

 1 abstract class Person {
 2     public abstract void eat();
 3 }
 4
 5 public class Demo {
 6     public static void main(String[] args) {
 7         Person p = new Person() {
 8             public void eat() {
 9                 System.out.println("eat something");
10             }
11         };
12         p.eat();
13     }
14 }

运行结果:eat something

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

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

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

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

 1 interface Person {
 2     public void eat();
 3 }
 4
 5 public class Demo {
 6     public static void main(String[] args) {
 7         Person p = new Person() {
 8             public void eat() {
 9                 System.out.println("eat something");
10             }
11         };
12         p.eat();
13     }
14 }

运行结果:eat something

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

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

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

 1 public class Demo {
 2     public static void main(String[] args) {
 3         Thread t = new Thread() {
 4             public void run() {
 5                 for (int i = 1; i <= 5; i++) {
 6                     System.out.print(i + " ");
 7                 }
 8             }
 9         };
10         t.start();
11     }
12 }

运行结果:1 2 3 4 5

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

 1 public class Demo {
 2     public static void main(String[] args) {
 3         Runnable r = new Runnable() {
 4             public void run() {
 5                 for (int i = 1; i <= 5; i++) {
 6                     System.out.print(i + " ");
 7                 }
 8             }
 9         };
10         Thread t = new Thread(r);
11         t.start();
12     }
13 }

运行结果:1 2 3 4 5

时间: 2024-08-06 14:02:51

匿名内部类的一些看法的相关文章

IT十八掌作业_java基础第七天_匿名内部类、异常、包和jar

利用白富美接口案例,土豪征婚使用匿名内部类对象实现. 2.定义三角形类Trianle,里面包含三个int类型属性,分别表示三条边的长度, 构造三角形对象时,任意两边之和是否大于第三边,如若不成立,抛出自定义异常. 3.Person类中增加birthday属性,对setBirthday(int ,int , int )方法进行异常处理, 要求年有效.月有效.日有效.年月日指定的具体日期有效,对不同情况分别抛出不同的异常. 4.将类定义到指定的包下.com.it18zhang,编译之后,打成jar文

包、修饰符、内部类、匿名内部类(java基础知识十)

1.package关键字的概述及作用 * A:为什么要有包     * 将字节码(.class)进行分类存放  * B:包的概述     *   * C:包的作用     * 包名要定义在第一行,     * 包名.*这个包下所有的类都可见     * 具体的类比较好,能提高效率 2.包的定义及注意事项 * A:定义包的格式 * package 包名; * 多级包用.分开即可* B:定义包的注意事项 * A:package语句必须是程序的第一条可执行的代码 * B:package语句在一个jav

WEB、接口、APP自动化测试的一些看法

当故事看即可,只是个人看法............... 目前在各个软件公司中基本上存在WEB和APP的对外系统,不管是电子商务.电信.新闻等基本上都有WEB和APP同时存在.对于APP个人感觉是新东西,但也觉得它就是个老东西,因为大家是否记得我们曾经装在电脑上的Application应用程序,当然一个管理软件当时就很NB了.不过现在手机上的Application和以前电脑上的Application当然不管技术上还是形态上都是不一样的,但使用上似乎是一样的,同样的下载---安装---使用.这些都

对Android未来前景的看法

对Android未来前景的看法        当今智能手机已经成为我们生活的一部分,扮演者一个重要的角色.人们越来越离不开手机了.而智能手机现在大致分为iOS和Android两大阵营.iOS主打封闭,好用.封闭.流畅,而Android却是秉着开源开放性的特点.Android几乎垄断了中低端手机的市场.        因为其门槛低,所以很多手机商都偏爱Android系统.因为高端使用者的比例并不多,所以也就导致中低端的Android获得了相对比较大的一部份比例.Android系统不断的完善使得An

我的学习之路_第三章_匿名内部类

final: final是最终修饰符,可以修饰类.成员方法.变量. final修饰的类无法被继承. final修饰的方法无法被重写. final修饰的变量无法被再次赋值,变为了常量. final修饰的引用数据类型变量,可以修改对象里面的属性内容,不可改变地址值 final修饰的成员变量,不能使用默认值,没有意义,必须在创建对象之前完成赋值. static: 静态修饰符,被static修饰的内容属于类不专属于某个对象,多个对象共享使用这一个成员 使用static修饰的成员可以用类名直接访问,建议这

对苹果公司未来的一点看法

这段时间苹果和微信的"打赏 "风波,闹得行业沸沸扬扬.大家纷纷站出来指责苹果公司太霸道,为了利润什么钱都敢要.而且有很多人看衰苹果,觉得如果微信等主流的软件一旦不支持苹果的设备,那么苹果的前景将一片黯淡.网上有太多的文章和论点在讨论苹果和微信们到底谁重要,就不在这里重复别人的观点了,没多大意义. 其实我也对苹果的前景不太看好,并不是因为这次的风波.个人感觉即使没有这场风波,苹果的未来仍然不乐观.前段时间看了<乔布斯传>,被乔布斯的魅力深深的折服的同时也坚定了自己看衰苹果的看

“匿名内部类”的使用场合举例

package com.sxt.set6; import java.util.Comparator; import java.util.HashSet; /* * TreeSet 有序的 二叉树(红黑数) */ import java.util.Set; import java.util.TreeSet; /* * 匿名内部类 * 使用场合:只需要创建一次对象,就不在使用了,没有必要提供专门的实现类(不使用外部比较器) * */ public class TestStudent { public

匿名内部类

为什么有内部类 每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响.内部类使得多重继承的解决方案变得更加完整. 如何定义一个匿名内部类 以学校和老师的关系为例 //学校类 class School{ public static Teacher getTeacher(){ //匿名内部类 return new Teacher(){ public void teaching(){ System.out.println("张三老师在讲课&q

java9-9 匿名内部类

1. 匿名内部类 就是内部类的简化写法. 前提:存在一个类或者接口 这里的类可以是具体类也可以是抽象类. 格式: new 类名或者接口名(){ 重写方法; } new Xxx()是创建了一个对象,而抽象类和接口不能被new修饰, 所以,这里的东西的本质已经变了 那么,本质是什么呢? 是一个继承了该类或者实现了该接口的子类匿名对象. 1 interface Inter4{ 2 public abstract void show(); 3 public abstract void show2();