`
ganqing1234
  • 浏览: 168972 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

内部类

阅读更多
内部类 指在另一个类内部的类,它可以继承外部类或实现接口。除非是在宿主类的非static方法里,不然创建内部类的对象必须使用 OuterClassName.InnerClassName的形式。

    ......
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.createInnerClass();
    }
    ......


内部类可以声明为 private 和 protected, 外部类则不可以, 它们只可能是 public 和 package。
class Test3 {
	private class C3 implements Contents {
		private int i;
	    public int value() {return i;}
	}
	
	protected class D3 implements Desc {
		private int i;
	    public int value() {return i;}
	}
	
	public Desc newDesc() {
		return new D3();
	}
	
	public Contents newContents() {
		return new C3();
	}
}

public class Test {

	/**
	 * @param args
	 */

	
	public static void main(String[] args) {
		Test3 test3 = new Test3();
		
		Contents c  = test3.newContents();
	}

}


内部类还可以用于方法和作用域中。这种叫本地内部类 local inner classes,它们不能有访问控制符,因为它不属于宿主类,但它可以访问当前代码段的 finnal 变量以及宿主的所有变量。

    ......
    void test() {
        class Test2 {
        ......
        }
        Test2 t2 = new Test2();
        ......
    }
    ......


匿名内部类  更改上面如下: 可以看到 可以定义时初始化成员变量,但要是final类型。

      ......
      public Contents newContents(final int j) {
		return new Contents() {
			int i = j;
			public int value() {return i;};
		};
	}


static 的内部类称为 嵌套类, 普通的内部类都包含着其宿主类的对象。
它的特点是:1  无需宿主类的对象就能创建嵌套类的对象
          2  不能在嵌套类类里访问非static的宿主类对象。
普通的内部类里不能有static的成员。

为甚么使用内部类?

每个内部类都可以独立实现某个实现, 因此内部类不会受“宿主类是否已经继承了别的实现”的束缚。它彻底的解决了多重继承问题。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics