java内部类笔记
内部类
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内部类笔记的更多相关文章
- [转]Java 内部类笔记
内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权 ...
- Java开发笔记(五十四)内部类和嵌套类
通常情况下,一个Java代码文件只定义一个类,即使两个类是父类与子类的关系,也要把它们拆成两个代码文件分别定义.可是有些事物相互之间密切联系,又不同于父子类的继承关系,比如一棵树会开很多花朵,这些花儿 ...
- Java学习笔记之---内部类
Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 瘋耔java语言笔记
一◐ java概述 1.1 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- Java系列笔记(6) - 并发(上)
目录 1,基本概念 2,volatile 3,atom 4,ThreadLocal 5,CountDownLatch和CyclicBarrier 6,信号量 7,Condition 8,Exchang ...
随机推荐
- PyQt(Python+Qt)学习随笔:枚举类QTreeWidgetItem.ItemType、QListWidgetItem.ItemType的取值及含义
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Model/View的便利类QTreeWidget.QListWidgetItem中的项类型分别是 ...
- PyQt(Python+Qt)学习随笔:Designer中ItemViews类部件的frameShadow属性
老猿Python博文目录 老猿Python博客地址 frameShadow属性是从QFrame继承的属性,对应类型为QFrame.Shadow,该属性表示框架提供三维效果的阴影类型,有如下取值: 可以 ...
- CSS基础-边框
border border-top设置上边界 border-bottom / border-left / border-right 同理 可以为每一条边设置 : border-top-width宽度 ...
- golang omitempty 总结
golang omitempty 总结 在使用Golang的时候,不免会使用Json和结构体的相互转换,这时候常用的就是 json.Marshal和json.Unmarshal两个函数. 这时候在定义 ...
- 题解-CF617E XOR and Favorite Number
题面 CF617E XOR and Favorite Number 给定 \(n,m,k\) 和 \(n\) 个数的序列 \(a_i\),\(m\) 次求区间 \([l,r]\) 中异或值为 \(k\ ...
- 模块urllib requests json xml configparser 学习笔记
发起http请求 获取返回值 返回值是字符串 第三方模块安装 pip install requests 返回值格式 xml html jaon json 功能 loads 字符串>&g ...
- Centos安装JDK、Tomcat
准备工作,先下载JDK.Tomcat包:使用FileZilla将软件包发送到/home/software目录下. 1 安装JDK8 首先卸载已有的JDK. # 查看版本 java -version # ...
- STL——容器(deque)deque 的插入 insert()
deque.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置. 1 #include <iostream> 2 #include <d ...
- 如何使用交易开拓者(TB)开发数字货币策略
更多精彩内容,欢迎关注公众号:数量技术宅.想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01 为何使用交易开拓者(TB)作为回测工具 交易开拓者(后文以TB简称)是一个支持国内期货市场K线 ...
- 是的,你没看错!Python可以实现自动化办公
是的,你没看错!Python可以实现自动化办公 公众号[伤心的辣条],如今越来越多的人加入到学习Python的队伍当中,尤其是对于很多职场人来说,不管你是程序员还是非程序员,Python已经为很多职场 ...