博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java的匿名内部类
阅读量:4304 次
发布时间:2019-05-27

本文共 1982 字,大约阅读时间需要 6 分钟。

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

 

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

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:匿名内部类的基本实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

 

 

 

 

转载地址:http://qrhws.baihongyu.com/

你可能感兴趣的文章
CTA策略02_boll
查看>>
vnpy通过jqdatasdk初始化实时数据及历史数据下载
查看>>
设计模式19_状态
查看>>
设计模式20_观察者
查看>>
vnpy学习10_常见坑
查看>>
vnpy学习10_常见坑02
查看>>
用时三个月,终于把所有的Python库全部整理了!拿去别客气!
查看>>
pd.stats.ols.MovingOLS以及替代
查看>>
vnpy学习11_增加测试评估指标
查看>>
资金流入流出计算方法
查看>>
海龟交易法则07_如何衡量风险
查看>>
海龟交易法则08_风险与资金管理
查看>>
海龟交易法则09_海龟式积木
查看>>
海龟交易法则10_通用积木
查看>>
海龟交易法则14_掌控心魔
查看>>
海龟交易法则15_万事俱备
查看>>
海龟交易法则16_附原版海龟交易法则
查看>>
克罗谈投资策略01_期货交易中的墨菲法则
查看>>
克罗谈投资策略02_赢家和输家
查看>>
克罗谈投资策略03_你所期望的赌博方式
查看>>