Loading

day 7 匿名内部类

/* 匿名内部类: 其实就是内部的简化形式。 前提:  内部类必须继承或者实现外部类或接口。

格式:  new 父类&接口(){};  其实就是一个子类对象。有点胖。

为什么要有匿名内部类?   提高开发效率 

*/

abstract class Test    //Test 能不能创建对象? 不能  因为有抽象方法    -->抽象类的子类能创建对象,因为它覆盖来了父类方法
{
     abstract void show();	
}

class Outer
{
	int x = 3;
	
	//1定义内部类
	class Inner
	{
	    void show()
	    {
	    	System.out.println(x);
	    }
	}
	
	//2定义内部类
	class Inners extends Test
	{
		//重写了父类方法
	    void show()
	    {
	    	System.out.println(x);
	    }
	}
	
	//为了内部类能对外访问,提供一个方法
	public void method()
	{
		//写法一
		Inner inner = new Inner();
		inner.show();
		
		//写法二
		new Inner().show();
		
		//匿名内部类
		new Test()
		{	
			public void show()
			{
				System.out.println("x=" + x);
			}
		}.show(); //其实就是创建了一个比较胖的对象,对象调用成员,格式上有些特殊
		
		
	   //典型的多态,父类引用子类的对象
	   Test test = new Test()
	   {
		   public void show()
		   {
			   System.out.println("x="+x);
		   }
	   };
	   test.show();
	   
	   
	   func(new Test()
		{	
			public void show()
			{
				System.out.println("x=" + x);
			}
		} ); //其实就是创建了一个比较胖的对象,对象调用成员,格式上有些特殊
	  
	}
	
	   //将对象做为参数传递
	   public void func(Test t)
	   {
		   t.show();
	   }
}


public class InternalDemo {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Objectfunc();
		new Outer().method();
        
		//
		function(new Test()
		{
			public void show(){System.out.println("123");}
		});
	}
	 
    public static void function(Test t)
    {
    	t.show();
    }
	
    
    public static void Objectfunc()
	{
		new Object()//可以这样写但不能描述事物的具体含义
		{
			void show()
			{
				System.out.println("obj show");
			}
		}.show();
	}
}

  

posted @ 2012-06-11 22:55  The Mechanic  阅读(99)  评论(0编辑  收藏  举报