匿名内部类

说明:

假设我们在代码里声明一个Product接口,然后创建一个Apple类来实现它,代码如下:

 1 package com.hw.InnerClassDemo;
 2 interface Product{
 3     public double getPrice();
 4     public String getName();
 5 }
 6 
 7 class Apple implements Product{
 8     public double getPrice(){
 9         return 5;
10     }
11     public String getName(){
12         return "苹果";
13     }
14 }
15 
16 public class InnerClassDemo2 {
17     public static void main(String[] args){
18         Product pro = new Apple();
19         System.out.println(pro.getName());
20     }
21 }

运行效果:

 但是,如果在主方法里,这个Apple类的对象只需要用一次,以后都不需要再用了,那这样特意为了它创建一个类是不是显得有点浪费?如何解决呢?我们可以创建一个匿名内部类。

 


 

匿名内部类:

可以这样操作:

 1 package com.hw.InnerClassDemo;
 2 interface Product{
 3     public double getPrice();
 4     public String getName();
 5 }
 6 
 7 public class InnerClassDemo2 {
 8     public static void main(String[] args){
 9         System.out.println(
10             new Product(){                       //这里定义了一个实现Product接口的子类,但没有名字
11                 public double getPrice(){        //所以叫做匿名内部类
12                     return 5;
13                 }
14                 public String getName(){
15                     return "苹果";
16                 }
17             }.getName()
18         );
19     }
20 }

这样,直接在输出语句里面用它,就相当于用完之后就丢弃了,不再用了,只用一次,这样就很方便了。其中new Product()表示调用了匿名内部类的构造方法。

运行效果:

或者可以这样:

 1 package com.hw.InnerClassDemo;
 2 interface Product{
 3     public double getPrice();
 4     public String getName();
 5 }
 6 
 7 public class InnerClassDemo2 {
 8     public static void test(Product p){
 9         System.out.println(p.getPrice());
10         System.out.println(p.getName());
11     }
12     
13     public static void main(String[] args){
14         InnerClassDemo2.test( 
15             new Product(){                       
16                 public double getPrice(){    
17                     return 5;
18                 }
19                 public String getName(){
20                     return "苹果";
21                 }
22             }
23         );
24     }
25 }

传递的参数就是new Product那一大堆。

 

posted @ 2021-01-30 10:06  EvanTheBoy  阅读(82)  评论(0)    收藏  举报