java_内部类、匿名内部类的使用
内部类
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。
内部类的分类
- 成员内部类,类定义在了成员位置 (类中方法外称为成员位置)
- 局部内部类,类定义在方法内
成员内部类 :定义在类中方法外的类。
class 外部类{
// 成员变量
// 成员方法
class 内部类{
// 成员变量
// 成员方法
}
}
内部类可以直接访问外部类的成员,包括私有成员
创建内部类对象格式:
外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。
比如,Axx$Bxx.class
局部内部类 :定义在方法中的类
class 外部类名 {
数据类型 变量名;
修饰符 返回值类型 方法名(参数列表) {
// …
class 内部类 {
// 成员变量
// 成员方法
}
}
}
匿名内部类
匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的父类或者父接口的匿名的子类对象
匿名内部类必须继承一个父类或者实现一个父接口。
格式:
new 父类名或者接口名(){
// 方法重写
@Override
public void method() {
// 执行语句
}
};
以接口为例,匿名内部类的使用,代码如下:
public class Demo1 {
public static void main(String[] args) {
new Swim(){
@Override
public void swiming() {
System.out.println("蛙泳....");
}
}.swiming(); //蛙泳....
//返回一个实现了swim接口的子类对象,只不过该对象是匿名的
Swim swim = new Swim() {
@Override
public void swiming() {
System.out.println("仰泳...");
}
};
swim.swiming(); //仰泳...
}
}
//定义游泳接口
interface Swim{
void swiming();
}
//定义实现类,实现该接口
class Person implements Swim{
@Override
public void swiming() {
System.out.println("蛙泳.....");
}
}
匿名内部类的本质
- 定义一个没有名字的内部类
- 这个类实现了Swim接口
- 创建了这个没有名字的类的对象
匿名内部类的使用场景
通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。
public class Demo1 {
public static void main(String[] args) {
// 普通方法
Student s1 = new Student();
swim(s1);
// 使用匿名内部类方式,创建了一个匿名的类,该类实现了Swim接口
swim(new Swim() {
@Override
public void swiming() {
System.out.println("狗刨式游泳....");
}
});
swim(new Swim() {
@Override
public void swiming() {
System.out.println("蛙泳....");
}
});
}
// 模拟,请一些人去游泳
public static void swim(Swim s) {
s.swiming();
}
}
// 定义游泳接口
interface Swim {
void swiming();
}
// 定义实现类,实现该接口
class Student implements Swim {
@Override
public void swiming() {
System.out.println("狗刨式游泳.....");
}
}
java_内部类、匿名内部类的使用的更多相关文章
- 内部类&匿名内部类
内部类:如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象.这时,为了方便设计和访问,直接将A类定义在B类中.就可以了.A类就称为内部类.内部类可以直接访问外部类中的成员.而外部类想要访问内 ...
- Java学习笔记:内部类/匿名内部类的全面介绍
编写java程序时,一般一个类(或者接口)都是放在一个独立的java文件中,并且类名同文件名(如果类是public的,类名必须与文件名一致:非public得,无强制要求).如果想把多个java类放在一 ...
- 【Java入门提高篇】Day8 Java内部类——匿名内部类
今天来看看另一个更加神奇的类--匿名内部类. 就像它的名字表示的那样,这个类是匿名的,用完之后,深藏功与名,就像扫地僧那样默默潜藏于深山之中.匿名内部类不仅没有名字,连class关键字都省掉了,而且匿 ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- JAVA_内部类
内部类 什么是内部类? 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类 成员内部类:定义在类中方法外的类 定义格式示例: public class Tesdt { publ ...
- Java ——扩展:内部类 匿名内部类 IO file 设计模式
内部类的拓展 定义类or方法内部的类 最外层的类只能使用public和默认修饰 class Demo { class A { } public static void main(String[] ar ...
- Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案
内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...
- 17.继承 and18.接口和多态 内部类 匿名内部类,Lambda表达式
1. 继承 1.1 继承的实现(掌握) 继承的概念 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法 实现继承的格式 继承通过extends实现 ...
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
本文主要记录:在JAVA中,(局部)内部类访问某个局部变量,为什么这个局部变量一定需要用final 关键字修饰? 首先,什么是局部变量?这里的局部是:在方法里面定义的变量. 因此,内部类能够访问某局部 ...
随机推荐
- 双网卡bonding
网卡:计算机与外界局域网的连接是通过主机箱内插入一块网络接口板(或者是在笔记本电脑中插入一块PCMCIA卡).网络接口板又称为通信适配器或网络适配器(adapter)或网络接口卡NIC(Network ...
- 《2020版Linux云计算学习图谱》帮你提升80%专业技能,在线免费领
2亿人在家办公.视频会议的需求,给钉钉后台系统带来巨大压力.据了解,钉钉在通过阿里云紧急扩容1万台服务器后,再度扩容1万台云服务器. 受疫情影响,在家办公需求暴涨.从29号开始到2月6日,腾讯会议每天 ...
- 从0搭建一个基于 ELK 的日志、指标收集与监控系统
为了使得私有化部署的系统能更健壮,同时不增加额外的部署运维工作量,本文提出了一种基于 ELK 的开箱即用的日志和指标收集方案. 在当前的项目中,我们已经使用了 Elasticsearch 作为业务的数 ...
- websphere8.5配置db2数据源
websphere8.5配置db2数据源 1. 打开websphere控制台 2.进入websphere变量页面 3. 进入DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH变 ...
- Android Studio采坑记录
折腾了几个月的Android Studio,终于在今天被我搞定了 ( ̄▽ ̄)~* 开贴记录下,免得下次再次采坑 先说下我之前电脑的环境配置吧,sdk是几年前在网上下载别人整理出来的包,一直没有更新过 ...
- APP自动化 -- 获取toast元素的文本内容
一.toast元素 1.表现形式:toast元素就是下图中 “操作成功” 那个一闪而过的标签. 2.特殊点:因为一闪而过,时间太短,用UIAutomatorView截屏截不到. 二.获取方法 1.用 ...
- 数字麦克风PDM信号采集与STM32 I2S接口应用(四)--单片机源码
本文是数字麦克风笔记文章的单片机程序.一些朋友私信我,调试出问题. 我就把源码贴出来吧,可能主要问题是DMA的配置. 尤其双DMA时候,需要手动启动I2S的接收DMA,HAL库没有这个接口,不看dat ...
- 大一寒假我在一个oj网站只刷了这些题从此入门了绝大部分通用算法
如果你想入门算法,那么我这篇文章也许可以帮到你. 先说点题外话.这是在一个不冷不热的寒假,照理来说寒假应该很冷,但这个寒假是真的舒服.这样舒服的寒假学习似乎是一件不可能的事情,所以我继续我的游戏生涯, ...
- laravel 用户认证简单示例
一.模型代码: 实现接口:\Illuminate\Contracts\Auth\Authenticatable 并引入trait:\Illuminate\Auth\Authenticatable &l ...
- Zuul token FIlter 验证失败结果输出
1.背景 用 postman 测试 zuul 网关 路由成功和失败的时候,发现 路由成功的时候,返回的结构体 是 json 格式,但是路由失败的时候,返回的是空. 结构体居然不一样,这对调用方来说也要 ...