当前位置:首页 > 开发 > 编程语言 > Java > 正文

java 内部类

发表于: 2015-07-01   作者:chamwarren   来源:转载   浏览次数:
摘要: 在 Java 中,允许在一个类(或方法、语句块)的内部定义另一个类,称为内部类(Inner Class),有时也称为嵌套类(Nested Class)。内部类和外层封装它的类之间存在逻辑上的所属关系,一般只用在定义它的类或语句块之内,实现一些没有通用意义的功能逻辑,在外部引用它时必须给出完整的名称。使用内部类的主要原因有: 内部类可以访问外部类中的数据,包括私有的数据。 内部

在 Java 中,允许在一个类(或方法、语句块)的内部定义另一个类,称为内部类(Inner Class),有时也称为嵌套类(Nested Class)

内部类和外层封装它的类之间存在逻辑上的所属关系,一般只用在定义它的类或语句块之内,实现一些没有通用意义的功能逻辑,在外部引用它时必须给出完整的名称。

使用内部类的主要原因有:

  • 内部类可以访问外部类中的数据,包括私有的数据。
  • 内部类可以对同一个包中的其他类隐藏起来。
  • 当想要定义一个回调函数且不想编写大量代码时,使用匿名(anonymous)内部类比较便捷。
  • 减少类的命名冲突。


请看下面的例子:

  1. public classOuter {
  2.     private int size;
  3.     public class Inner {
  4.         private int counter = 10;
  5.         public void doStuff() {
  6.             size++;
  7.         }
  8.     }
  9. public static void main(Stringargs[]) {
  10.     Outerouter = new Outer();
  11.     Innerinner = outer.new Inner();
  12.     inner.doStuff();
  13.     System.out.println(outer.size);
  14.     System.out.println(inner.counter);
  15.     // 编译错误,外部类不能访问内部类的变量
  16.     System.out.println(counter);
  17.     }
  18. }

这段代码定义了一个外部类 Outer,它包含了一个内部类 Inner。将错误语句注释掉,编译,会生成两个 .class 文件:Outer.class 和 Outer$Inner.class。也就是说,内部类会被编译成独立的字节码文件。

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

注意:必须先有外部类的对象才能生成内部类的对象,因为内部类需要访问外部类中的成员变量,成员变量必须实例化才有意义。

内部类是 Java 1.1 的新增特性,有些程序员认为这是一个值得称赞的进步,但是内部类的语法很复杂,严重破坏了良好的代码结构, 违背了Java要比C++更加简单的设计理念。

内部类看似增加了—些优美有趣,实属没必要的特性,这是不是也让Java开始走上了许多语言饱受折磨的毁灭性道路呢?本教程并不打算就这个问题给予一个肯定的答案。

java 内部类

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
成员内部类的意思就是,一个外层类里面包含着一个非static的class,举例如下: class OuterClass {
在Java中,被定义在另一类中的类被称为内部类,另一个相对于内部类的类叫做外部类。内部类允许编程
java内部类总结[转-] 2008-07-08 12:24 内部类是指在一个外部类的内部再定义一个类。内部类作为
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在
最近看到一个面试问题 内部类的实质是什么 看了别人给出的解释,上网查了相关资料,也自己动手测试
在某些情况下,把一个类放在另一个类的内部定义,这个定义在其他类内部的类就称为内部类。包含内部
顶层类只能处于Public跟默认访问级别. 而内部类可以处于任意访问级别. A 实例内部类: 在创建实例内
前言 提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套
内部类引用外部类方法,逻辑有些绕。 1.内部类生成对外部类对象的引用 外部类名称+.this; 2.外部类
(*)内部类:定义在类中的类 1,内部类可以直接访问外部类中的成员,包括私有,内部类成员调用外部
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号