`
leebot
  • 浏览: 5759 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

黑马训练营——内部类

阅读更多

 

内部类

可以将一个类的定义放在另一个类的定义内部,这就是内部类。

内部类是一个非常有用的特性,它允许你吧一些逻辑相关的类组织在一起,并控制内部类的可视性。

 

创建内部类

创建内部类就是把类的定义置于外围类的里面

 

public class Outer{
	class inner{
		private int i=11;
		public int value(){
			return i;
		}
	}
}

 内部类的访问规则

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

2:外部类要访问内部类,必须建立内部类对象

代码示例:

 

Outer.Inner in=newOuter().new Inner();//用到极少
in.method();

3:内部类成员和外部类成员对象类型和名称相同

内部类之所以能够访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式是Outer.this

 

class Outer{
	private int x=3;
	class Inner{
	void function(){
		int x=6;
		System.out.println("inner:"+this.x);//打印的值为6
		System.out.println("outer:"+Outer.this.x);//打印的值位3
	}
	}
}

 4:当内部类定义在外部类的乘员位置上,而且非私有,可以直接建立内部类对象

格式  外部类名.内部类名  变量名=外部类对象.内部类对象;

5:当内部类在乘员位置上,就可以被成员修饰符所修饰

比如:private:将内部类在外部类中进行封装

内部类可以被static修饰:内部类就具备了static的特性,当内部类被static修饰后,只能访问外部类中的静态成员变量了

静态内部类示例class Outer{

	class Outer{
	private static int x=3;
	static class Inner{
	void function(){
		
		System.out.println(x);//打印的值为3
		
		}
	}
}

 new Outer.Inner().function();//内部类对象调用function

new Outer.Inner.function();//这个是function为static的情况下

 PS:当内部类中定义了静态成员,该内部类必须是静态的

 

内部类定义在局部时,不可以被成员修饰符修饰,可以直接访问外部类中的成员,因为还持有外部类的引用,但是不可以访问他所在的局部中的变量,只能访问被final修饰的局部变量

 

匿名内部类:

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

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

//没有简化前

 

class ABSDemo{
	abstract void show();
}
class Outer{
	int x=3;
	class Inner extends ABSDemo{
		void show(){
			System.out.println(x);
		}
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics