匿名内部类
说明:
假设我们在代码里声明一个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那一大堆。