黑马程序员--外部类和内部类。(-)

内部类的访问规则
1,内部类可以直接访问外部类中的成员,包括私有。
之所以可以直接访问外部类中的成员,是因为内部类中持有了外部类的引用,格式 外部类名.this
2,外部类要访问内部类必须要建立内部类对象。
3,当内部类在成员位置上,就可以被成员修饰符所修饰
 比如 private :将内部类在外部类中进行封装。
static :内部类就具备了static的特性。内部类被静态修饰后,只能直接访问外部类中的静态成员。
当内部类中定义了静态成员,该内部类必须是static的。

class Outer
{
	private int x=3;
	class Inner //内部类
	{
		void function()
		{
			System.out.println("inner"+x);
			//打印的结果是inner3 内部类可以直接访问外部类成员包括变量
		}
	}
	void method()
	{
		Inner in=new Inner();
		in.function(0);
		//外部类要访问内部类必须要建立内部类对象。
	}
}
class InnerClassDemo
{
	public static void main(String[] args)
	Outer out=new Outer();
	out.method();

    Outer.Inner in=new Outer().new Inner();
	// 当内部类定义在外部类的成员位置上,而且非私有
	//直接访问内部类的成员格式。一般不常用
}

class Outer
{
	private int x=3;
	class Inner 
	{	int x=7;
		void function()
		{	int x=10;
			System.out.println("inner"+Outer.this.x+","+this.x+","+x);
			//打印结果是 3,7,10 Outer.this这是访问外部类中的成员的具体格式
		
		}
	}
	void method()
	{
		Inner in=new Inner();
		in.function(0);
		
	}
}
静态内部类的具体应用

class Outer
{
	private int x=3;
	static class Inner 
	{	int x=7;
		void function()
		{	int x=10;
			System.out.println("inner:"+x);
			//这样会出错的。内部类被静态修饰后,只能直接访问外部类中的静态成员。
		
		}
	}
	void method()
	{
		Inner in=new Inner();
		in.function(0);
		
	}
}
class InnerClassDemo
{
	public static void main(String[] args)
	new Outer.Inner().function();
	//直接方位静态内部类的访问写法。
}

局部内部类。
1,只有定义在成员位置才能被私有或者静态修饰。
内部类不能被成员修饰符修饰。
2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。

class Outer
{
	int x=3;
	void method()
	{
		int y=7;
		class Inner //局部内部类
		{
			void funciton()//局部内部类的内部方法不能被静态化修饰
			{
				System.out.println(Outer.this.x);
				//局部内部类也可以直接访问外部类成员变量.
				System.out.println(y);
				//局部内部类访问局部方法变量时候。变量必须要final修饰
				//所以这样访问时出错的。要 final int y=7; 修饰。
			}
		}
		new Inner().function();
		//必须放在局部类下面。
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值