内部类

1.   普通内部类

<pre name="code" class="java">class className{
[private|protected|public] [abstract|final] class className{
returnType method(){
[abstract|final] class ClassName{ }
}
}
}

内部类可以访问外部类的所有字段和方法。每一个内部类都和一个具体的父类实例相关联,且必须有一个父类实例才可以创建内部实例。内部类创建语法:

OutterClassName outter = newOutterClassName();

Outter.InnerType inner = Outter.newInner();

内部类获得外部类引用的语法:OutterClass.this;

2.   嵌套类

class ClassName{
[Private|protected|public]static [abstract|final] class ClassName{
returnType method(){
[abstract|final] class ClassName{ }
}
}
}

嵌套类可以访问外部类的静态字段和静态方法,且不必与外部类的相关实例相关联,因此不能获得外部类实例的引用,且不能访问外部类实例方法和字段。嵌套类的创建语法:

OutterClassName.InnerType inner = newOutterClassName.InnerType();

3.   匿名内部类

new SuperClassName|interfaceName(){

}

可用在new语句中,可以选择合适的父类构造函数。在方法中创建匿名内部类时,若要传递方法的参数给内部类时,在jdk1.8以前,需要方法的参数为final,jdk1.8中则可选为final

匿名内部类没有构造方法,不过可以选择合适的父类构造方法,通过父类的构造方法来实现一部分的构造功能,也可以通过实例初始化语法实现简单的构造功能。

匿名内部类因为创建语法中直接调用了父类的构造方法,因此自动获得了一个父类的实例。除了没有构造方法外,其余的特征和普通内部类相似。

父类可以是一个具体的类,也可以是接口类型。

总结

内部类在不同的作用域中是独立的,因此可以在不同的作用域创建相同名字的内部类。但在方法作用域和块作用域之间会有命名冲突的问题。方法中的内部类定义在相应块作用域之后,可以解决冲突。这和方法中的变量和相应块作用域的变量关系类似。

内部类是一个优雅的功能,但须防止滥用。内部内可以有效的拆分一个复杂类的功能,但又不失一个类的完整性,同时又可以获得有效的访问控制。匿名内部类可以部分的实现闭包的功能,又有类的完整性,但是滥用匿名内部类会影响代码的可读性和维护。

java内部类笔记的更多相关文章

  1. [转]Java 内部类笔记

    内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权 ...

  2. Java开发笔记(五十四)内部类和嵌套类

    通常情况下,一个Java代码文件只定义一个类,即使两个类是父类与子类的关系,也要把它们拆成两个代码文件分别定义.可是有些事物相互之间密切联系,又不同于父子类的继承关系,比如一棵树会开很多花朵,这些花儿 ...

  3. Java学习笔记之---内部类

    Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...

  4. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  5. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. 瘋耔java语言笔记

    一◐ java概述                                                                                        1.1 ...

  8. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  9. Java系列笔记(6) - 并发(上)

    目录 1,基本概念 2,volatile 3,atom 4,ThreadLocal 5,CountDownLatch和CyclicBarrier 6,信号量 7,Condition 8,Exchang ...

随机推荐

  1. 第11.25节 Python正则表达式编译re.compile及正则对象使用

    一. 引言 在<第11.2节 Python 正则表达式支持函数概览>介绍了re模块的主要函数,在<第11.3节 Python正则表达式搜索支持函数search.match.fullm ...

  2. 问题: 刚安装的PyCharm执行代码报“ModuleNotFoundError: No module named XXXX”错

    老猿刚安装好PyCharm后,直接新建了一个工程文件并导入了一个已有的爬虫程序文件,该文件原来在Python解释器下能执行,但在PyCharm下执行时报错: F:\学习\python\SRC\proj ...

  3. 第十章、Qt Designer中的Spacers部件

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一. 引言 在Designer的部件栏中,有两种类型的Spacers部件,下图中上面布局中为一个水平 ...

  4. CTFHub Web题学习笔记(Web前置技能+信息泄露题解writeup)

    今天CTFHub正式上线了,https://www.ctfhub.com/#/index,之前有看到这个平台,不过没在上面做题,技能树还是很新颖的,不足的是有的方向的题目还没有题目,CTF比赛时间显示 ...

  5. python冒泡算法联系代码

    root@(none):~/python# python maopao.py[6, 11, 13, 22, 99]root@(none):~/python# cat maopao.py #!/usr/ ...

  6. 使用darkarmour免杀mimikatz

    darkarmour是一个可用来免杀exe的项目,github地址:https://github.com/bats3c/darkarmour 我们使用darkarmour来免杀mimikatz. ./ ...

  7. 部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用

    前面介绍了很多关于ABP框架的后台Web API 服务端,以及基于Vue+Element前端应用,本篇针对两者的联合部署,以及对部署中遇到的问题进行处理.ABP框架的后端是基于.net core5.0 ...

  8. Kruskal重构树——[NOI2018] 归程

    题目链接: UOJ LOJ 感觉 Kruskal 重构树比较简单,就不单独开学习笔记了. Statement 给定一个 \(n\) 点 \(m\) 边的无向连通图,用 \(l,a\) 描述一条边的长度 ...

  9. 【题解】Generator(UVA1358)

    感觉我字符串和期望都不好-- 题目链接 题意 有 \(n\) 种字符,给定一个模式串 \(S\) ,一开始字符串为空,现在每次随机生成一个 1~n 的字符添加到字符串末尾,直到出现 \(S\) 停止, ...

  10. 题解-[国家集训队]Crash的数字表格 / JZPTAB

    题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...