Java基础00-内部类23
1. 内部类
1.1 内部类概述

代码示例:

1.2 成员内部类

代码示例:
创建一个成员内部类:
定义时没有小括号是因为类是没有形参的。
在类的成员位置,就是成员内部类了

创建测试类:
这里发现不可以直接创建成员内部类的实例对象,因为Inner是在内的内部。

所以要这样创建内部类:Outer.Inner = new Outer().Inner();

运行结果:
外部类的num是10

注意:
我们将成员内部类定义到的那个位置,一般来说就是不想让外界去访问它,所以上面的写法是不常见的,
一般都使用这样的写法,将public改为private,变为私有的,这样外界就访问不到它了。

测试类中以前的格式也就失效了

虽然在外界是访问不到成员内部类的,但是在类中还是能访问到的。
所以我们想要访问私有的成员内部类可以通过间接的方式访问。
访问Outer中的method方法就可以访问到私有的成员内部类了。

修改参数类:

运行:

1.3 局部内部类

代码示例:
局部内部类和局部变量的位置是一样的,写在成员方法中的。

在测试类中调用method就可以间接的使用局部内部类了

运行结果:

同时也可以在局部内部类中方法局部变量

1.4 匿名内部类


代码示例:
创建一个接口让匿名内部类实现:

在Outer类中写一个Inter接口的匿名内部类

在测试类中执行:

运行结果:
运行结果为空,向下看

怎么调用show方法那?
还是要看匿名内部类的本质:本质是一个继承了该类或者实现了该接口的子类匿名对象,
既然它是一个对象,那么是对象就能调用方法,直接在匿名子类对象的末尾点对象即可。

然后继续在测试类中执行:
这次可以执行show方法了

还有另外一种写法:
因为匿名内部类的本质就是一个没有名字的实现类或子类,所以它也可以通过多态赋值给它的父类或接口类,
这里我们用的是接口和实现类的实例,
接口 对象名 = 匿名内部类,然后用对象名调用方法
Inter i = new Inter(){…},这样写也是可以的,这样调用多次匿名内部类的时候就不会很麻烦了。

运行结果:

1.5 匿名内部类在开发中的使用
一个接口两个方法


public class JumppingsDemo {
public static void main(String[] args) {
JumppingsOperator j = new JumppingsOperator();
j.method(new Jumpping() {
public void jump() {
System.out.println("abc");
}
});
}
}
1. 创建一个跳高接口

2. 创建一个操作类

3. 创建一个测试类

4. 按照测试类的需求,创建接口操作类的对象,调用method方法
这里提示我们要的是Jumpping类型的实参,
但是Jumpping是一个接口,所以其实要的是Jumpping的实现类。

5. 创建一个Jumpping的实现类Cat

6. 继续在测试类中添加
利用多态将Jumpping的子类Cat传入method方法中。

运行实现:

假如还有好多动物它们都是只用jump方法一次,那么就要创建好多个类和创建好多个对象。
如果采用匿名内部类会是什么样的那?往下看
method其实要的是method的实现类,
而匿名内部类就是一个没有名字的实现类或子类,
那么可以怎么操作?

完全可以在jo.method(),中直接放入一个匿名内部类,然后实现接口的方法。

接着运行测试类:
完全可以达到和以前一样的效果,而且还可以不用创建类。

总结:如果一个类在整个操作中,只使用一次的话,就可以将其定义成匿名内部类。
Java基础00-内部类23的更多相关文章
- Java基础(00)
Java发展史 Java之父:詹姆斯.高斯林(James Gosling). SUN(Stanford University Network 斯坦福大学网络公司)产物. 1995年5月23日,java ...
- java基础之 内部类
Java中的内部类共分为四种: 静态内部类static inner class (also called nested class) 成员内部类member inner class 局部内部类loca ...
- Java基础(53):内部类(转)
java中的内部类总结 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行 ...
- Java基础(五)--内部类
内部类简单来说就是把一个类的定义放到另一个类的定义内部 内部类分为:成员内部类.局部内部类.匿名内部类.静态内部类 成员内部类:最常见的内部类 public class Outter { privat ...
- java基础之 内部类 & 嵌套类
参考文档: 内部类的应用场景 http://blog.csdn.net/hivon/article/details/606312 http://wwty.iteye.com/blog/338628 定 ...
- java基础随笔-内部类
今天来复习下内部类的一些基础知识. 首先是内部类的分类: 1.成员内部类 2.静态内部类 3.匿名内部类 4.局部内部类 下面逐一来介绍下. 首先是成员内部类,就是将内部类作为一个成员变量来处理.具体 ...
- java基础语法-内部类与匿名内部类
1.成员内部类(声明在类内部&&方法之外) class Person{ String name = "韩梅梅"; int age; class Bird{ Stri ...
- JAVA基础知识|内部类
一.什么是内部类? 内部类(inner class)是定义在另一个类中的类 为什么使用内部类? 1)内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据 2)内部类可以对同一个包中的其他类隐藏 ...
- Java基础加强-内部类及代理
/*内部类是一个编译时的概念,*/ 常规内部类.静态内部类.局部内部类.匿名内部类 1.常规内部类(常规内部类没有static修饰且定义在外部类类体中) 1.常规内部类中的方法可以直接使用外部类的实例 ...
- Java基础教程——内部类
内部类 内部类(inner class)是定义在另一个类中的类 内部类的好处: |--1.隐藏机制:内部类封装性更好,隐藏在一个类之中,同一包中的其他类也不能访问 |--2.内部类可以访问外围类的私有 ...
随机推荐
- 慢镜头变焦:视频超分辨率:CVPR2020论文解析
慢镜头变焦:视频超分辨率:CVPR2020论文解析 Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resol ...
- AI基础架构Pass Infrastructure
AI基础架构Pass Infrastructure Operation Pass OperationPass : Op-Specific OperationPass : Op-Agnostic Dep ...
- Wide & Deep的OneFlow网络训练
Wide & Deep的OneFlow网络训练 HugeCTR是英伟达提供的一种高效的GPU框架,专为点击率(CTR)估计训练而设计. OneFlow对标HugeCTR搭建了Wide & ...
- 3D点云深度学*
3D点云深度学* 在自动驾驶中关于三维点云的深度学*方法应用.三维场景语义理解的方法以及对应的关键技术介绍. 1. 数据 但是对于3D点云,数据正在迅速增长.大有从2D向3D发展的趋势,比如在open ...
- CodeGen用户定义的扩展令牌
CodeGen用户定义的扩展令牌 用户定义的扩展令牌是一种特殊的令牌,开发人员可以确定令牌的名称以及在代码生成过程中遇到令牌时要插入的值. CodeGen支持多种机制,允许通过以下方式实现用户定义的令 ...
- 那些年,我们一起做过的KNX智能化控制经典案例!
那些年,我们一起做过的KNX经典案例! 光阴之箭已经穿越年轮,抵达2021 GVS在2008年加入KNX国际协会,成为中国首批引进KNX标准的企业,此后,还率先研发出基于KNX的核心协议栈,定标准,做 ...
- jmeter工作目录介绍、jmeter元件及组件介绍
一.jmeter工作目录介绍: bin:放置各项配置文件(如日志设置.JVM设置).启动文件.启动Jar包.示例脚本等: docs:放置JMeter API的离线帮助文档: extras:JMeter ...
- ApplicationListener接口,在spring容器初始化后执行的方法
一.如果我们希望在Spring容器将所有的Bean都初始化完成之后,做一些操作,那么就可以使用ApplicationListener接口,实现ApplicationListener接口中的onAppl ...
- JVM Ecosystem Report 2020 (2020年JVM生态系统报告)
本文翻译自SNYK于2020年发布的< JVM Ecosystem Report 2020 >,全文使用机器翻译自动生成,人为将翻译的离谱和翻译明显错误的地方修正到勉强能看懂的程度. 英语 ...
- 【NX二次开发】NX内部函数,查找内部函数的方法
[NX二次开发]NX内部函数,libufunx.dll文件中的内部函数 [NX二次开发]NX内部函数,libugui.dll文件中的内部函数 [NX二次开发]NX内部函数,libuifw.dll文件中 ...