------- android培训、java培训、期待与您交流! ----------
内部类,有时叫做嵌套类。内部类允许一个类定义被放到另一个类定义里。内部类是一个有用的特征,因为它们允许将逻辑上同属性的类组合到一起,并在另一个类中控制一个类的可视性。
例1
public class Outer1{
private int size;
//定义一个内部类
public class Inner{
public void doStuff( ){
//内部类从外部类中接受参数size
size++;
}
}
public void testTheInneer( ){
Inner i= new Inner( );
i.doStuff( );
}
}
内部对象拥有一个外部对象的引用:
例2
这个例子阐述了如何在其它类(外部类的外部)实例化内部类:
public class Outer2{
private int size;
public class Inner{
public void doStuff( ){
size++;
}
}
}
public class TestInneer( ){
public static void main(String[ ] args){
Outer2 outer = new Outer2( );
//创建内部类对象
Outer2.Inner inner = outer.new Inner( );
inner.doStuff( );
}
}
内部类要在外部类实例的上下文中实例化:
例3
本例阐述如何区分同名变量:
public class Outer3{
private int size;
public class Inner{
private int size;
public void doStuff( int size){
size++; //本地方法参数
this.size++; //内部类参数
Outer.this.size++; //外部类参数
}
}
}
1.4. 例4
本例阐述在方法内部定义内部类:
public class Outer4{
private int size = 5;
public Object makeTheInner((int localVar){
final int finalLocalVar = 6;
class Inner{
public String toString( ){
return (“Inner size=” + size +
”localVar=” + localVar + “finalLocalVar=” + finalLocalVar +”);
}
}
return new Inner();
}
public static void main(String[] args){
Outer4 outer = new Outer4();
Object obj = outer.makeTheInner(47);
System.out.println(“The object is “ + obj);
}
}
注意:在方法中定义的内部类的方法,不能访问外方法的运行时变量空间,可以访问外方法的非运行时变量空间。
内部类属性
内部类有如下属性:
内部类只在定义他们的代码段内可见。
内部类可以被定义在方法中。如果方法中的变量被标记为final,那么,就可以被内部类中的方法访问。
内部类可以使用所嵌套类的类和实例变量以及所嵌套的块中的本地变量。内部类可以被定义为abstract.
只有内部类可以被声明为private或protected,以便防护它们不受来自外部类的访问。
一个内部类可以作为一个接口,由另一个内部类实现。被声明为static的内部类自动地成为顶层类。这些内部类失去了在本地范围和其它内部类中使用数据或变量的能力。
内部类不能声明任何static成员;只有顶层类可以声明static成员。因此,一个需求static成员的内部类必须使用来自顶层类的成员。