`

inner class

 
阅读更多

public class Outer {   //outer class
	
	public String[] items;
	
	public Outer(){};
	
	public Outer(int size){
		items = new String[size];
	}
	
	public void outer(){
		System.out.println("Outer.outer()!");
	}
	
	//内部类
	public class Inner{  //inner class
		
		//返回对外部类对象的引用,采用外部类的名字后面加点和this
		public Outer getOuter(){
			return Outer.this;
		}
		//当外围对象enclosing object创建一个内部类对象时,
		//内部类对象会秘密地捕获一个指向外围类对象的引用,内部类拥有外围类的所有元素的访问权
		public int getLength(){       //返回外部类Outer的私有字符串数组变量items的长度
			return items.length;
		}
	}
	//外部类通常有一个方法,返回一个指向内部类的引用
    public Inner getInner(){
    	return new Inner();
    }
	
	public static void main(String[] args) {
		Outer o1 = new Outer();
		//从外部类的非静态方法之外的任意位置创建某个内部类的对象,
		//必须具体地指明这个对象的类型:OuterClassName.InnerClassName,此处可去掉Outer
		Outer.Inner oi1 = o1.getInner();
		oi1.getOuter().outer();
		
		Outer o2 = new Outer(10);
		//通过外部类对象去创建其某个内部类对象,必须在new表达式中提供对该外部类对象的引用
		Outer.Inner oi2 = o2.new Inner();
		System.out.println(oi2.getLength());
		
		//在拥有外部类对象之前是不可能创建内部类对象的,除非创建的是静态内部类
	}
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics