Home

韧桂

思考,总结

匿名内部类的应用

匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

new 父类构造器实参列表|实现接口(){
    //匿名内部类的类体部分
}
package eleven;

public class TestProduct {
	public static void main(String[] args) {
		TestProduct t = new TestProduct();
		//方式一:创建一个实现 Product 接口的类的对象,并将此对象传入方法中
		NoteBook n = new NoteBook();
		t.show(n);
		//方式二:创建一个实现Product接口的匿名类的对象
		Product p = new Product(){
			public void getName(){
				System.out.println("Cayenne");
			}
			public void getPrice(){
				System.out.println("¥1300000.00");
			}
		};
		//方式三:创建一个实现Product接口的匿名类的匿名对象
		t.show(new Product(){
			public void getName(){
				System.out.println("iPhone11 Pro Max");
			}
			public void getPrice(){
				System.out.println("¥10899.00");
			}
		});
		System.out.println();
		Product p1 = t.getProduct();
		p1.getName();
		p1.getPrice();
		
	}
	
	//局部内部类的使用
	public Product getProduct(){
//		//方式一:实现Product接口的局部内部类
//		class Camera implements Product{
//
//			@Override
//			public void getName() {
//				System.out.println("数码相机");
//			}
//
//			@Override
//			public void getPrice() {
//				System.out.println("4000");
//			}
//			
//		}
//		return new Camera();
		//方式二:实现Product接口的匿名局部内部类
		return new Product(){
			@Override
			public void getName() {
				System.out.println("电纸书");
			}

			@Override
			public void getPrice() {
				System.out.println("1000");
			}
		};
		
	}
	
	public void show(Product p){
		p.getName();
		p.getPrice();
	}
}

interface Product{
	void getName();
	
	void getPrice();
}

class NoteBook implements Product{
	public void getName(){
		System.out.println("MECHREVO笔记本");
	}
	public void getPrice(){
		System.out.println("¥6399");
	}
}

韧桂 2019-12-31