首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

第10章-内部类_静态内部类(嵌套种)

2013-07-30 
第10章--内部类_静态内部类(嵌套类)静态内部类和普通内部类区别(1) 普通内部类中默认含有外围类的引用,? ?

第10章--内部类_静态内部类(嵌套类)

静态内部类和普通内部类区别

(1) 普通内部类中默认含有外围类的引用,

? ? 所以一个普通内部类必须要链接一个外围类的对象,

? ? 这样普通内部来就不存在 任意的静态成员了(也不能包含static的内部类).

? ? (因为静态成员都是使用类来访问的,假如普通内部类能够包含静态成员,

? ? 而访问这些静态成员时,又需要外围类的对象,这样就与静态成员用类访问相抵触.)

? ??

(2) 静态内部类切断和外围类对象之间的联系,不存在对外围类对象的应用.

? ? 所以,静态内部类可以包含任何的静态对象,

? ? 但是,静态内部类只能访问它的外围类的静态成员.

? ??

(3) 创建普通内部类,使用 外围类对象.new 内部类()的方式,

? ? 创建静态内部类,不能用这种方式,只能用 new 外围类.内部类()的方式.

? ??

(4) 定义内部类类型是,静态内部类 只能用 [外围类.内部类 对象名] 方式.

? ? 普通内部类可以直接使用 内部类定义,

? ? 但是 使用 [外围类.内部类 对象名]方式看起来更清楚

public interface Contents{  int value();}public interface Destination{  String readLabel();}class TestParcel11{  private int iCommon=0;  private static int iStatic = 0;  public static class ParcelContents implements Contents  {    private int i = 11;    private int iInner = iStatic; //静态内部类只能访问 外围类的静态成员    public int value()    {      return i;    }  }  class CommonInnerClass  {    class ThressLevel    {          }    private int i = 11;    public int value()    {      return i;    }  }  static class ParcelDestination implements Destination  {    private String label;    private ParcelDestination(String whereTo)    {      label = whereTo;    }    public String readLabel()    {      return label;    }    // Nested classes can contain other static elements:    public static void f()    {    }    static int x = 10;    //静态内部类内部,也可以有静态内部类,但是普通内部类不能包含任何静态成员    static class AnotherLevel    {      public static void f()      {      }      static int x = 10;    }  }  public static Destination destination(String s)  {    return new ParcelDestination(s);  }  public static Contents contents()  {    return new ParcelContents();  }} public class Parcel11{  public static void main(String[] args)  {    TestParcel11 tp = new TestParcel11();    Contents c = TestParcel11.contents();    //必须明确指定 TestParcel11.ParcelContents 这种方式 定义变量类型    TestParcel11.ParcelContents pc = new TestParcel11.ParcelContents();    // 创建静态内部类,只能用 new 外围类.内部类()的方式.    Contents pc2 = new TestParcel11.ParcelContents();    //TestParcel11.ParcelContents pc1 = tp.new ParcelContents();    // 上面使用普通内部类方式 创建static(嵌套)内部类对象反而不行    TestParcel11.CommonInnerClass tc = tp.new CommonInnerClass();    Destination d = TestParcel11.destination("Tasmania");  }}

?

热点排行