javaSE-面向对象-匿名内部类

匿名内部类

l就是内部类的简化写法。
l前提:
内部类可以继承或实现一个外部类或者接口。
l格式为:
new外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}
l简单理解:
就是建立一个带内容的外部类或者接口的子类匿名对象。
package  com.test3;

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

格式:
new 父类名或者接口名(){定义内部类的内容;}

匿名内部类其实就是一个子类匿名对象。

*/

abstract class AbsDemo
{
	abstract void function();
}

class Outer
{
	int num = 4;
	/*
	class Inner extends AbsDemo
	{
		void function()
		{
			System.out.println("num="+num);
		}

	}
	*/
	void method()
	{
//		new Inner().function();
		new AbsDemo()//创建了内部类的对象。
		{//对内部类的描述。
			void function()
			{
				System.out.println("num===="+num);
			}
		}.function();
	}
}

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


package com.test4;



abstract class AbsDemo
{
	abstract void function();
	abstract void show();
}

class Outer
{
	int num = 4;
	/*
	class Inner extends AbsDemo
	{
		void function(){}
		void show(){}
	}
	*/
	void method()
	{
		
//		Inner in = new Inner();
//		in.function();
//		in.show();

		AbsDemo a = new AbsDemo()
		{
			void function(){}
			void show(){}
		};
		a.function();
		a.show();

	}

	
	void method2()
	{
		Object obj = new Object()//父类引用指向了子类对象。子类对象被向上转型了。
		{
			
			void show2(){System.out.println("show2 run");}
			void show3(){System.out.println("show3 run");}
		};

//		obj.show2();//失败的。因为Object中没有定义show2方法。
	}
}



class NoNameInnerDemo2 
{
	public static void main(String[] args) 
	{
//		Outer out = new Outer();
//		out.method2();
		Outer2.show().method();

		/*
		Outer2.show(): Outer2类中有一个show方法。而且这个方法是被静态修饰的。
		Outer2.show().method();调用完show方法后的运算结果是一个对象,一个可以调用method方法的对象。
							这个对象类型一定是Inter类型。
		*/
	}
	
}

class Outer2
{
	//补足内部代码。用匿名内部来完成。
	static Inter show()
	{
		return new Inter()
		{
			public void method(){}
		};
	}

	
}

interface Inter
{
	public void method();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值