java匿名内部类实例

匿名内部类:内部类的简化写法
a) 前提:存在一个类或者接口,此处的类可以是具体类也可以是抽象类
b) 格式:new 类名或者接口名(){重写方法}
c) 本质是一个匿名对象:继承了该类或实现该接口的子类的匿名对象,并没有调用对象的方法

Demo1

interface Inter{
	public abstract void show1();
	public abstract void show2();
	public abstract void show3();
}

class Outer{
	public void method(){
		//方法一:方便连续调用
		Inter i=new Inter(){
			public void show1(){
				System.out.println("show1");
			}
			public void show2(){
				System.out.println("show2");
			}
			public void show3(){
				System.out.println("show3");
			}
		};
		
		i.show1();
		i.show2();
		
		//方法二,调用起来比较麻烦。
		new Inter(){
			public void show1(){
				System.out.println("show1");
			}
			public void show2(){
				System.out.println("show2");
			}
			public void show3(){
				System.out.println("show3");
			}
		}.show3();
	}
	
}


class Demo{
	public static void main(String [] args){
		Outer o=new Outer();
		o.method();
		
	}
}

Demo2

interface Person{
	public abstract void show();
}

class Man implements Person{
	public void show(){
		System.out.println("多态实现接口");
	}
} 
class Test{
	public void test(Person p){
		p.show();
	}
}



class Demo1{
	public static void main (String [] args){
		Test t=new Test();
		
		//方法一,利用多态实现接口
		Person p1=new Man();
		t.test(p1);
		
		System.out.println("-----------");
		
		//方法二,利用匿名对象类实现接口,安卓里面常用此方法,因为匿名类用完之后内存就可以回收节省内存
		//格式一
		Person p2=new Person(){
			public void show(){
				System.out.println("格式一匿名对象实现接口");
			}
		};
		t.test(p2);
		
		System.out.println("-----------");
		
		//格式二
		
		t.test(new Person(){
			public void show(){
				System.out.println("格式二匿名对象实现接口");
			}
		}
		);
				
	}
	
}

面试题

/*
	按照要求,补齐代码输出HelloWorld
	interface Inter{
		void show();
	}
	class Outer{
		补齐代码
	}
	class OuterDemo{
		public static void main (String []args){
			Outer.method().show();
		}
	}


*/

interface Inter{
	//public abstract
	void show();
}
class Outer{
	//方法一
/*	public static Inter method(){
		return new Inter(){
			public void show(){
				System.out.println("HelloWorld");
			}
		};
*/
	//方法二
	public static Inter method(){
		Inter i= new Inter(){
			
			public void show(){
				
				System.out.println("HelloWorld");
			}
		};
		return i;
	}
}
class OuterDemo{
	public static void main (String []args){
		Outer.method().show();
		//1、通过Outer.method()可以看出method()是Outer中的静态方法。
		//2、Outer.method().show()由于调用show()方法可以看出method()方法的返回值是一个对象。
		//3、由于接口中有show()方法,所以返回值类型应该是Inter类型对象
	}
}
``

猜你喜欢

转载自blog.csdn.net/zfliu96/article/details/83055629