Java第十三天,内部类
内部类
一、①成员内部类、②局部内部类(包含③匿名内部类)
1、内部类用外部类属性和方法的时候,可以随意进行访问。
2、外部类用内部类属性和方法的时候,需要通过内部类对象访问。
3、在编译成class文件的时候,内部类会用 $ 符号标志。形式如下:
外部类 $ 内部类
二、成员内部类
1.如何定义成员内部类?
修饰符 class 外部类名{
......
修饰符 class 内部类名{
......
}
}
2.如何使用成员内部类?
①间接方式:外部类的方法中使用内部类,通过调用外部类访问外部类的方法而间接使用内部类。
②直接方式:外部类.内部类 对象名 = new 外部类().new 内部类()
eg:
Animal.Dog dog = new Animal().new dog();
3.如果内部类和外部类初现同名变量,内部类中应该如何访问外部类的同名变量
外部类.this.同名变量
eg:
pubilc class Animal{
int age = 2;
public class Dog{
Animal.this.age = 3;
}
}
三、局部内部类
定义在方法内的类,成为局部内部类
只有方法内可以使用,出了这个方法就不能用了。
局部内部类如果要访问所在外部类成员方法的变量,则这个变量必须是被final修饰的不可变 变量(原因:new的对象是在堆内存,但是局部变量和方法同在栈内存,方法调用结束后会被回收,但是局部对象(堆内存)不会。为了防止局部对象访问变量失败,必须复制局部变量值(不可改变))。
四、匿名内部类(属于局部内部类)
如果接口的实现类或者父类的子类只需要使用一次,那么就可以省略掉该类的定义,而改用匿名内部类。
匿名内部类定义格式如下:
接口 对象名 = new 接口(){
//覆盖重写所有抽象方法
};
或
抽象类 对象名 = new 抽象类(){
//覆盖重写所有抽象方法
};
或
new 接口(){
//覆盖重写所有抽象方法
};
new 抽象类(){
//覆盖重写所有抽象方法
};
注意
前两个是匿名内部类但却不是匿名对象。
后两个是匿名内部类同时也是匿名对象。
五、匿名内部类注意事项:
① 匿名内部类在创建对象的时候,只能使用一次。也就是说每创建一个对象,都得实现一次接口或者抽象类。
② 匿名对象在使用方法的时候,只能调用一次。
六、内部类修饰权限规范
外部类 | 成员内部类 | 局部内部类 | |
public | YES | YES | NO |
protected | NO | YES | NO |
(default) | YES | YES | NO |
private | NO | YES | NO |
从表中我们可以得到信息,外部类只允许使用public和默认(不写)修饰;成员内部类允许所有类型的权限修饰符;局部内部类不允许使用任何权限修饰符(不写任何关键字,但是意义也不等同于“default”)。
七、代码:
Usb抽象类代码:
public abstract class UsbAbs {
public abstract void inPut();
}
Usb接口代码:
public interface UsbInt {
public abstract void outPut();
}
电脑类代码:
public class Computer {
public static void main(String[] args) {
new UsbAbs(){
@Override
public void inPut() {
System.out.println("优盘已经插入。");
}
}.inPut();
new UsbInt(){
@Override
public void outPut(){
System.out.println("优盘已经拔出");
}
}.outPut();
UsbAbs usbAbs = new UsbAbs() {
@Override
public void inPut() {
System.out.println("优盘再次被插入");
}
};
UsbInt usbInt = new UsbInt() {
@Override
public void outPut() {
System.out.println("优盘再次被拔出");
}
};
usbAbs.inPut();
usbInt.outPut();
}
}
Java第十三天,内部类的更多相关文章
- “全栈2019”Java第九十三章:内部类应用场景(迭代器设计模式)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java的四种内部类
Java的四种内部类包括如下: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类: 定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,......相当于外部类的非静态方法 ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- C#的匿名委托 和 Java的匿名局部内部类
.NET:C#的匿名委托 和 Java的匿名局部内部类 目录 背景实验备注 背景返回目录 这几天重温Java,发现Java在嵌套类型这里提供的特性比较多,结合自身对C#中匿名委托的理解,我大胆的做了一 ...
- Java面向对象 Object类 内部类
Java面向对象 Object类 内部类 知识概要: 一:Object类 二:内部类 匿名内部类的写法 1.Object O ...
- Java的四种内部类(含代码实例)
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- “全栈2019”Java第九十章:内部类可以向上或向下转型吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第十三章:基本数据类型
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十三章:流程控制语句中决策语句switch上篇
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java学习笔记之---内部类
Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...
随机推荐
- 03、MySql的数据类型
MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 1.数字类型 类型 大小 范围(有符号) 范围(无符号) ...
- 01.UNIX基础知识
1.UNIX体系结构 什么叫做内核? 内核是一种软件,它控制计算机硬件资源,并提供程序的运行环境. 什么叫操作系统? 在广义上,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,如可以 ...
- OO课程的完结,软件工程学习的开始
目录 UML小结 阅读学习 大象:Thinking in UML UML精粹 UML和模式应用 本单元作业的架构设计 四个单元中架构设计及OO方法的演进 四个单元中测试与实践的演进 课程收获 三个具体 ...
- 【简说Python WEB】flask-mail电子邮件异步Asynchronous
系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6.9 flask-mail电子邮件异步Asynchronou ...
- Web过滤器和监听器
1.过滤器 1.1什么是过滤器 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servle ...
- 论文速递 | 实例分割算法BlendMask,实时又state-of-the-art
BlendMask通过更合理的blender模块融合top-level和low-level的语义信息来提取更准确的实例分割特征,该模型效果达到state-of-the-art,但结构十分精简,推理速度 ...
- CVE-2019-3396:Confluence未授权模板注入_代码执行
title: Confluence未授权模板注入/代码执行(CVE-2019-3396) tags: [poc,cve] 简介 Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企 ...
- 【笔记3-31】Python语言基础-列表list
列表list my_list = [1, 2, 3, 4, 5] 索引index my_list[0] 获取列表长度 len(my_list) 切片 [起始:结束:步长] my_list[1:3:2] ...
- 一文看懂NLP神经网络发展历史中最重要的8个里程碑!
导读:这篇文章中作者尝试将 15 年的自然语言处理技术发展史浓缩为 8 个高度相关的里程碑事件,不过它有些偏向于选择与当前比较流行的神经网络技术相关的方向.我们需要关注的是,本文中介绍的许多神经网络模 ...
- 8 个出没在 Linux 终端的诡异家伙
这篇文章,我们一起来到 Linux 的诡异的一面-- 你知道吗?在我们日常使用的 Unix(和 Linux )及其各种各样的分支系统中,存在着一些诡异的命令或进程,它们让人毛骨悚然,有些确实是有害,但 ...