在类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类

内部类可以很好地实现隐藏,一般的非内部类是不允许有 private 与 protected 权限的,但内部类可以。内部类拥有外部类的所有元素的访问权限。

内部类可以分为:实例内部类、静态内部类和成员内部类,每种内部类都有它特定的一些特点,本节先详细介绍一些和内部类相关的知识。

在类 A 中定义类 B,那么类 B 就是内部类,也称为嵌套类,相对而言,类 A 就是外部类。如果有多层嵌套,例如类 A 中有内部类 B,而类 B 中还有内部类 C,那么通常将最外层的类称为顶层类(或者顶级类)。

内部类也可以分为多种形式,与变量非常类似,如图 1 所示。

内部类的特点如下:

  • 内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。
  • 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否为 private 的。
  • 内部类声明成静态的,就不能随便访问外部类的成员变量,仍然是只能访问外部类的静态成员变量。

例子:
内部类的使用方法非常简单,例如下面的代码演示了内部类最简单的应用。

public class Test {public class InnerClass {public int getSum(int x,int y) {return x + y;}}public static void main(String[] args) {Test.InnerClass ti = new Test().new InnerClass();int i = ti.getSum(2,3);System.out.println(i);    // 输出5}
}

有关内部类的说明有如下几点。

  • 外部类只有两种访问级别:public 和默认;内部类则有 4 种访问级别:public、protected、 private 和默认。
  • 在外部类中可以直接通过内部类的类名访问内部类。
InnerClass ic = new InnerClass();    // InnerClass为内部类的类名

在外部类以外的其他类中则需要通过内部类的完整类名访问内部类。

Test.InnerClass ti = newTest().new InnerClass();    // Test.innerClass是内部类的完整类名

内部类与外部类不能重名。

提示:内部类的很多访问规则可以参考变量和方法。另外使用内部类可以使程序结构变得紧凑,但是却在一定程度上破坏了 Java 面向对象的思想。

1.14 java内部类是什么鬼东西相关推荐

  1. java内部类相关的底层实现

    首先我们来看看使用内部类的一个例子. interface INormalInner{void normalInner(); } public class NormalInnerClass {priva ...

  2. java 内部类_Java——内部类详解

    说起内部类,大家肯定感觉熟悉又陌生,因为一定在很多框架源码中有看到别人使用过,但又感觉自己使用的比较少,今天我就带你具体来看看内部类. 内部类基础 所谓内部类就是在类的内部继续定义其他内部结构类. 在 ...

  3. java内部格式_详解java内部类的访问格式和规则

    详解java内部类的访问格式和规则 1.内部类的定义 定义一个类来描述事物,但是这个事物其中可能还有事物,这时候在类中再定义类来描述. 2.内部类访问规则 ①内部类可以直接访问外部类中的成员,包括私有 ...

  4. Java内部类的使用小结

    内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的,也可用public,default,protected和private修饰.(而外部顶级类即类名和 ...

  5. [转] Java内部类详解

    作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  6. [转载] java 内部类与闭包

    参考链接: Java本地内部类 内部类 首先,让我们看看什么是内部类(Java 内部类,成员类,局部类,匿名类等): 根据内部类的位置不同,可将内部类分为 成员内部类局部内部类 class C{ // ...

  7. [转载] 夯实Java基础系列8:深入理解Java内部类及其实现原理

    参考链接: Java内部类 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tut ...

  8. Java内部类相关问题的总结与体会

    Java内部类相关问题的理解 一,内部类的概念: 内部类(Inner Class)就是定义在另一个类里面的类,与之对应,包含内部类的类称为外部类,内部类仍然是一个独立的类,在编译后内部类会被编译成独立 ...

  9. 夯实Java基础系列18:深入理解Java内部类及其实现原理

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

最新文章

  1. easyui-menu 解决disableItem不能禁用绑定事件的方法
  2. 简书非官方大数据(一)
  3. swift为UIView添加extension扩展frame
  4. mybaits九:自定义结果映射规则
  5. vue 路由参数变化,页面不刷新,provide /inject 完美解决方案
  6. Python列表以及列表的处理方法
  7. java三层架构项目事例_三层架构实例
  8. leetcode 474. 一和零(dp)
  9. python高手能做什么_python高手们、能不能给新手写点心得,迷茫过、好方法、过渡期等等...
  10. 人脸识别dlib库 记录
  11. C语言整型在计算机的储存
  12. 在打字稿中,是什么! (惊叹号/ bang)运算符取消引用成员时?
  13. 洛谷P3378 【模板】堆
  14. WORD出错:UNDO之后布局错乱
  15. java实现文件上传下载功能_java文件上传下载功能实现代码
  16. 动态cookie-ob混淆
  17. nod32 激活码 地址 NOD 32
  18. 下载Windows10纯净官方镜像
  19. java异或_干货:Java异或运算符的使用方法
  20. html炫酷文本框,炫酷的input框实现

热门文章

  1. Dataset之CIFAR-10:CIFAR-10数据集简介、下载、使用方法之详细攻略
  2. mybatis入门(六)----高级映射(一对一,一对多,多对多)
  3. 课堂练习--最大子数组和 环
  4. Android中广播接收者BroadcastReceiver详解
  5. uva 129 回溯法入门
  6. 在win8.1 64位系统+cocos2d-x2.2.3下搭建android交叉编译环境
  7. greenplum(一)
  8. Oracle 游标(cursor) 说明
  9. [导入]DotNet软件开发框架
  10. EOS 智能合约源代码解读 (9)boot合约