前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java的内部类详解(结合代码全面分析)

Java的内部类详解(结合代码全面分析)

作者头像
bboy枫亭
发布2020-09-22 10:53:17
3980
发布2020-09-22 10:53:17
举报
文章被收录于专栏:csdn_blogcsdn_blog

分分钟搞清楚Java内部类

概述

​ 内部类是一种特殊的类,指的是定义在一个类的内部的类。实际开发中,为了方便的使用外部类的相关属性和方法,这时候我们通常会定义一个内部类。

​ 一般情况下,我们把类定义成独立的单元,有些情况下,我们把一个类放在另一个类的内部定义,称为内部类(innerclasses)。

​ 内部类可以使用 public、private、default、protected 以及 static 修饰。而外部顶级类只能使用 public 和 default 修饰。

注意

​ 内部类只是一个编译时的概念,一旦我们编译成功,就会成为完全不同的两个类。对于一个名为 Outer 的外部类和其内部定义的名为 Inner 的内部类。编译完成后会出现两个类的字节码文件。所以内部类是相对独立的一种存在,其成员变量、方法名可以和外部类相同。

示例

在这里插入图片描述
在这里插入图片描述

上面代码编译后产生两个字节码文件

在这里插入图片描述
在这里插入图片描述
  • 内部类作用
    • 内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其它类直接访问
    • 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类不能访问内部类的内部属性

分类

  • 成员内部类
    • 非静态内部类
    • 静态内部类
  • 匿名内部类
  • 局部内部类

非静态内部类

非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)

  1. 非静态内部类对象必须寄存在一个外部类对象里。因此,如果有一个非静态内部类对象,那么一定存在对应的外部类对象。非静态内部类对象单独属于外部类的某个对象。
  2. 非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类成员。
  3. 非静态内部类不能有静态方法、静态属性和静态初始化块。
  4. 成员变量访问要点
    • 内部类里方法的局部变量:变量名
    • 内部类属性:this.变量名
    • 外部类属性:外部类名.this.变量名
内部类中访问成员变量

我这人不喜欢一大堆理论阐述,直接来段代码玩玩就明白了。Look!

示例

在这里插入图片描述
在这里插入图片描述
  • 内部类的访问: 1.外部类中定义内部类:new Inner()。 2.外部类以外的地方使用非静态内部类:Outer.Inner varname=new Outer().new Inner()
内部类的访问
在这里插入图片描述
在这里插入图片描述

静态内部类

代码语言:javascript
复制
static class className{
    ...
}

要点

代码语言:javascript
复制
1. 静态内部类可以访问外部类的静态成员,不能访问外部类的普通成员。

2. 静态内部类看做外部类的一个静态成员。
在这里插入图片描述
在这里插入图片描述

匿名内部类

适合那种只需要使用一次的类。比如:键盘监听操作等等。在安卓开发、awt、swing 开发中较为常见。

代码语言:javascript
复制
    new 父类构造器(实参类表)\实现接口(){
        //匿名内部类类体
    }

注意

匿名内部类没有访问修饰符

匿名内部类没有构造方法,因为它连名字都没有,何来构造方法呢。

在这里插入图片描述
在这里插入图片描述

局部内部类

​ 定义在方法内部的,作用域只限于本方法,称为局部内部类。

​ 局部内部类的使用主要是用来解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到时候又不希望这个类时公共可用的,所以就产生了局部内部类。局部内部类和成员内部类一样被编译,只是它的作用于发生了改变,它只能在该方法中被使用,出了该方法就会失效。

​ 局部内部类在实际开发应用中很少。

在这里插入图片描述
在这里插入图片描述

over!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分分钟搞清楚Java内部类
  • 概述
  • 分类
    • 非静态内部类
      • 内部类中访问成员变量
      • 内部类的访问
    • 静态内部类
      • 匿名内部类
        • 局部内部类
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档