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(),中直接放入一个匿名内部类,然后实现接口的方法。

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

总结:如果一个类在整个操作中,只使用一次的话,就可以将其定义成匿名内部类。

最新文章

  1. WPF MVVM中在ViewModel中关闭或者打开Window
  2. vmware中两台虚拟机互相访问
  3. oracle字符函数
  4. rsync无密码实时增量同步
  5. <s:if>标签与ActionContext.getContext().getSession()
  6. [原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)
  7. DNS与网站优化
  8. Extjs 4.1 struts2.3 返回json 初试
  9. [python]Python2编码问题
  10. java 整型数组基本排序,冒泡,快速选择,插入,归并
  11. FFMPEG结构体分析:AVPacket
  12. 关于CocoaPods的ruby镜像文件问题
  13. 二分搜索树实现Java的Map(下)
  14. 前端神器之jquery
  15. Chen qiaoqiao Studio
  16. 【XSY1476】平凡之路 斜率优化DP
  17. Ubuntu Server Download
  18. java中的相对目录问题
  19. java第一次课
  20. 阿里云api调用做简单的cmdb

热门文章

  1. C# HTTP请求对外接口、第三方接口公用类
  2. 安全利器 — SELinux
  3. NVIDIA GPU的神经网络自动调度
  4. NVIDIA Nsight Systems CUDA 跟踪
  5. 一文搞定Samba云服务器配置(阿里云)
  6. 解决redis集群版本不一致导致RDB同步失败的问题
  7. 计算机网络-vlan划分
  8. 《Learning to warm up cold Item Embeddings for Cold-start Recommendation with Meta Scaling and Shifting Networks》论文阅读
  9. MySQL进阶:主主复制+Keepalived高可用
  10. TensorFlow入门实操课程第一章练习笔记