黑马程序员--内部类

--------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ------------------

 

内部类即在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,且依附于外部类而存在。

内部类的访问规则:

(1)内部类可以直接访问外部类中的成员,包括私有。

(2)外部类需要访问内部类时,必须建立内部类对象。访问格式:外部类名.内部类名 变量名 = 外部类对象.内部类对象

内部类之所以可以直接访问外部类中的成员,是因为内部类中持有了外部类的引用。访问格式:外部类名.this。

例:

class Outer//外部类
{
	int num=3;
	class Inner//内部类
	{
		void show()
		{
			System.out.println("Inner num="+num);
		}
	}
	void function()
	{
		Inner in =new Inner();
		in.show();
	}
}

class InnerClassDemo
{
	public static void main(String[] args)
	{
		//Outer.out=new Outer();//内部类访问外部类中的成员
		//out.function();
		Outer.Inner in =new Outer().new Inner();//外部类访问内部类成员
		in.show();
	}
}



        当内部类被static修饰后,内部类只能直接访问外部类中的static成员,出现了访问局限。当内部类中定义了静态成员,该内部类也必须是静态的。当外部类中的静态方法访问内部类时,内部类也必须是静态的。当内部类定义在局部时,它不可以被成员修饰符修饰,但是内部类依然可以访问外部类类中的成员,因为内部类仍然持有外部类的引用,但是不可以访问它所在的局部变量,只能访问被final修饰的局部变量。

        内部类分为成员内部类、静态嵌套类、方法内部类和匿名内部类。接下来我只介绍匿名内部类。

        匿名内部类,顾名思义,没有名字的内部类。表面上看起来它们似乎有名字,实际那不是它们的名字。匿名内部类其实就是内部类的简写格式。对于匿名内部类,我们要注意以下几点:

(1)定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。

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

(3)匿名内部类中定义的方法最好不要超过3个。

(4)匿名内部类不能定义任何静态成员、方法和类。

(5)匿名内部类不能有构造方法。

例:

interface Inter
{
	void method();
	
}

class Test
{
	static Inter function()
	{
		return new Inter()//匿名内部类
		{
			public void method()
			{
				System.out.println("method run!");
			}
		};
	}
}

class InnerClassTest
{
	public static void main(String[] args)
	{
		//Test.function():Test类中有一个静态的方法function。
		//.method():function这个方法运算后的结果是一个对象。
		Test.function().method();
	}
}


 

---------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! -----------------

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值