(一) java1.1以后版本添加了嵌套类(Inner Class,嵌套类、内部类)。嵌套类定义在类(外部类)里面。 嵌套类可以体现逻辑上的从属关系。同时对于其他类可以控制内部类不可见等。 外部类的成员变量作用域是整个外部类,包括嵌套类。但外部类不能访问嵌套类的PRivate成员。例子: public class Outer { private int size; public class Inner{ private int counter = 10; public void doStuff(){ size++; } } public static void main(String args[]){ Inner inner= new Inner(); inner.doStuff(); System.out.println(size); System.out.println(inner.counter); System.out.println(counter); //编译错 } }
(二)下面演示了如何在外部类之外实例出一个public Inner类对象。
类名前加上外部类类名,new语句前加上外部类的引用变量。这很类似package的使用。 例子: public class Outer { private int size; public class Inner{ public void doStuff(){ size++; } } }
public class TestInner{ public static void main(String args[]){ Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); inner.doStuff(); } } (三)当内部类与外部类有同名变量时,缺省指本类中的变量。 例子:public class Outer { private int size; public class Inner{ private size; public void doStuff(int size){ size++; this.size++; Outer.this.size++; // 错误,Outer.size++因为size不是静态变量 } } public static void main(String args[]){ this.size++; //错误,静态方法使用非静态变量this } } (四)在方法中定义一个嵌套类,注重嵌套类不可以访问方法的局部变量。 因为方法的局部变量只存在与方法作用期间,故localvalue不可访问。而final变量的生命周期超出了方法,所以fianlvalue可用。 public class Outer { private int size =5; public Object makeTheInner(int localvalue){ final int finalvalue = 6; class Inner{ public String toString(){return (“Inner is”+size+localvalue+finalvalue);} } return new Inner(); }