匿名内部类

匿名内部类:

1:匿名内部类其实就是内部类的简写格式。

2:定义匿名内部类的前提:

      内部类必须是继承一个类或者实现接口;

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

4:其实匿名内部类就是一个匿名子类对象,而且这个对象有点胖,可以理解为带内容的对象;

5:匿名内部类中定义的方法最好不超过3个;

 

 

abstract class AbsDemo
{
	abstract void show();
}
class Outer 
{
	int x;
	void function()
	{
		/*
	    class Inner extends AbsDemo
	    {
		    viod show()
		    {
			    System.out.println(x);
		    }
	    }
		*/
		new AbsDemo()
		{
			void show()
			{
				System.out.println(x);
			}
		}.show();//方法调用,当然里面再添加一个特有的方法也可以调用,但一次只能调用一个方法
		//这个相当于创建AbsDemo的子类对象
	}
}
class NimDemo
{
	public static void main(String[] args)
	{
		new Outer().function();
	}
}


这样写也行

abstract class AbsDemo
{
	abstract void show();
}
class Outer 
{
	int x=9;
	void function()
	{
		AbsDemo p=new AbsDemo()
		{
			void show()
			{
				System.out.println(x);
			}
			void abc()
			{
				System.out.println("haha");
			}
		};//!!!
		p.show();
	}
}
class NimDemo2
{
	public static void main(String[] args)
	{
		new Outer().function();
	}
}

这其实就是多态,但如果加上 p.abc()  就不行,因为父类中没有;

 

  做个练习

interface Inter
{
	void method();
}
class Test
{}//补足里面代码
class InnerTset
{
	public static void main(String[] args)
	{
		Test.function().method();
	}
}


 

分析

Test.function():Test类中有一个静态的方法function;

.method:function这个方法运算后的结果是一个对象,而且是一个Inter类型的对象。

因为只有Inter类型的对象,才可以调用method方法。

 

 

内部类:

interface Inter
{
	void method();
}
class Test
{
	   static class Inner implements Inter
		{
			public void method()
			{
				System.out.println("haha");
			}
		}
	static Inter function()
	{
	   return new Inner();
	}
}
class InnerTset
{
	public static void main(String[] args)
	{
		Test.function().method();
	}
}


 

内部匿名类

interface Inter
{
	void method();
}
class Test
{
	static Inter function()
	{
	   return new Inter()
		{
           public void method()
			{
				System.out.println("haha");
			}
		};
	}
}
class InnerTest
{
	public static void main(String[] args)
	{
		Test.function().method();
	}
}


 

说一个面试小问题:

要是某个类没有父类呢,怎么使用匿名??

看下面代码

class InnerTest4
{
	public static void main(String[] args)
	{
		new Object()
		{
			public void function()
			{
				System.out.println("hahah");
			}
		}.function();
	}
}

这也是可以执行的


记住:有一个永远的父类 Object ;

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值