深入理解java匿名内部类(详细)

匿名内部类

匿名内部类是没有名字的类,它主要是为了重写抽象类和接口中的抽象方法(全部)

下面通过代码演示可以清晰的感受到匿名内部类的用法及优点

1.省略继承的过程

public class NoName {
	public static void main(String[] args) {
		persion p1 = new xiaoming();
        persion p1 = new persion();
		p1.show();	
	}
}
//
abstract class persion{
	abstract void show();
} 
//
class  xiaoming extends persion{
	@Override
	void show() {
		System.out.println("我是小明");
	}
	
}

这是在没有使用匿名内部类时常用的写法.

public class NoName {
	public static void main(String[] args) {
	persion p1 = new persion() {
			@Override
			void show() {
				System.out.println("匿名内部类:小明");
				
			}
		};
		p1.show();
			
	}
}
//
abstract class persion{
	abstract void show();	
}

在通过使用匿名内部类的时候省去了创建xiaoming类去继承抽象类的过程.注意匿名内部类是隐式继承,不是不继承.

2.匿名内部类在接口中的使用

public class NoName {
	public static void main(String[] args) {
		nonameclass aa = new xiaoming();
		aa.show();	
	}
}

interface nonameclass {
	void show();
}
class xiaoming implements nonameclass{

	@Override
	public void show() {
		System.err.println("我是小明");
		
	}
}

上面代码是常见实现类重写接口中的抽象方法.

public class NoName {
	public static void main(String[] args) {
		nonameclass p1 = new nonameclass() {
			@Override
			public void show() {
				System.out.println("匿名内部类小明");
			}
		};
		p1.dodo();
	}
	interface nonameclass {
	void show();
}

通过匿名内部类省略了创建实现类的过程.所以合理使用匿名内部类可以优化我们的代码.

匿名内部类写法:

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


因为匿名内部类没有名字,为了方便理解可以这样想,没有类名,应该省去classextends关键字
new  (class  xiaoming extends) persion{ 
	@Override
	void show() {
		System.out.println("我是小明");
	}
}

你可能感兴趣的:(java)