课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 昆明java培训——内部类
  • 昆明java培训——内部类

    发布:昆明Java培训      来源:达内新闻      时间:2016-05-05

  • 内部类(inner class)是定义在另一个类中的类,为什么要使用内部类呢?昆明java培训觉得其主要原因有以下三点:

    1.内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。

    2.内部类可以对同一个包中的其他类隐藏起来。

    3.当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

    1.使用内部类访问对象状态

    只有内部类可以是私有类,而常规的类只能具有包的可见性,或公有的可见性。

    内部类的对象有一个隐式引用(这个引用在内部类的定义中是不可见的),它引用了实例化该内部类对象的外围类对象。通过这个指针,可以访问外围类对象的全部状态。

    所以,内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域。

    2.内部类的特殊语法规则

    使用外围类引用的正规语法:

    OuterClass.this

    可以采用下列语法格式更加明确地编写内部对象的构造器:

    OuterObject.new InnerClass(construction parameters)

    在外围类的作用域之外,可以这样引用内部类:

    OuterClass.InnerClass

    3.内部类是否实用、必要和安全

    内部类是一种编译器现象,与虚拟机无关。编译器将会把内部类翻译成用美元符号$分隔外部类名与内部类名的常规类文件,而虚拟机对此一无所知。

    编译器为了引用外部类,生成了一个附加的实例域this$0。

    编译器在外围类添加静态方法access$100。

    这样内部类与常规类比起来就具有了额外的访问特权,而虚拟机对此并不了解。

    昆明java培训建议如果内部类访问了私有数据域,那么就有可能通过附加在外围类所在包中的其他类访问它们,但做这些事情需要高超的技巧和极大的决心。

    4.局部内部类

    可以在一个方法中定义局部类。

    局部类不能用public或private访问说明符进行声明,它的作用域被限定在声明该局部类的块中。局部类的一个优势即对外部世界可以完全地隐藏起来。

    局部类还有一个优势,它们不仅能够访问包含它们的外围类的域,而且还可以访问局部变量,不过这些局部变量必须被声明为final,对它进行初始化后不能够再修改。

    编译器必须检测对局部变量的访问,为每一个变量建立相应的数据域,并将局部变量拷贝到构造器中,以便将这些数据域初始化为局部变量的副本。

    5.匿名内部类

    假如只创建这个类的一个对象,就不必为它命名了,这种类被称为匿名内部类。

    通常的语法格式为:

    new SuperType(construction parameters)

    {

    inner class methods and data

    }

    SuperType可以是类也可以是接口。

    由于构造器的名字必须和类名相同,而匿名类没有类名,所以匿名类不能有构造器。

    6.静态内部类

    有时候使用内部类只是为了把一个类隐藏在另外一个类的内部,并不需要内部类引用外围类对象。为此,可以将内部类声明为static,以便取消产生的引用。

    即public static class ClassName

    只有内部类可以声明为static。

    静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他内部类完全一样。

    昆明java培训提醒注意,声明在接口中的内部类自动成为public和static。

    推荐文章

上一篇:昆明java培训——接口interface

下一篇:处理基础Observer设计模式

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56