普通类,我们平时见到的那种类,就是一个后缀为.java的文件中,直接定义的类,比如

public Cat{
  private String name;
  private int age;
}

内部类,

内部类。顾名思义,就是包含在外部类中的类,就叫内部类。内部类有两种,一种是静态内部类,一种是非静态内部类。

静态内部类和非静态内部类的区别主要如下:

1、内部原理的区别:

静态内部类是属于外部类的成员, 是一种静态的成员,是属于类的,就有点类似于private static Singleton instance = null;

非静态内部类,是属于外部类的实例对象的一个实例成员,也就是说,每个非静态内部类, 不是属于外部类的,是属于外部类的第一个实例的,创建非静态内部类的实例以后,非静态内部类实例,是必须跟一个外部类的实例进行关联和有寄存关系的。

2、创建方式的区别

静态内部类

public class School {
private static School instance = null;
static class Teacher{}
}

创建静态内部类的时候,只要直接使用"外部类.内部类()"的方式,就可以,比如new School.Teacher();

非静态内部类

public class School {
private String name;
class Teacher{}
}

创建非静态内部类的时候,必须要先创建一个外部类的实例,然后通过外部类的实例,再来创建内部类的实例,new School().Teacher()

通常来说,我们一般都会为了方便,会选择使用静态内部类。

匿名内部类

接口只有方法,没有方法实现

public interface ISayHello {
String sayhello(String name);
}

接口实现类在另一个类的内部,甚至在一个方法里面。匿名内部类一定式继承某一个类或者实现接口,必须去实现抽象类的方法或者接口的方法。

匿名内部类的使用场景,通常来说,就是在一个内部类,只要创建一次,使用一次,以后就不再使用的情况下,就可以。那么,此时,通常不会选择在外部创建一个类,而是选择直接创建一个实现了某个接口、或者继承了某个父类的内部类,而且通常是在方法内部,创建一个匿名内部类。

最新文章

  1. Shell命令行操作
  2. 在VC项目中附加包含目录
  3. windows下git bash显示中文
  4. T-SQL 变量
  5. 小白日记42:kali渗透测试之Web渗透-SQL盲注
  6. 选择排序(SelectSorted)
  7. php代码20个实用技巧 ------ 转发自菜鸟教程
  8. 一道有趣的Twitter技术面试题
  9. monkey Test 环境配置
  10. js给图层添加动态样式
  11. elasticsearch kabana中创建索引
  12. stega -- Pcat老入群题
  13. MariaDB 用户与权限管理(12)
  14. csv文件的读取
  15. 苹果ATS 豁免摆乌龙?
  16. haproxy文章
  17. Git -- 分支管理简介
  18. 【BZOJ2839】集合计数(容斥,动态规划)
  19. windows installer服务无法启动,无法打开任何msi文件
  20. application/json 和 application/x-www-form-urlencoded的区别

热门文章

  1. JMeter-性能测试之报表设定的注意事项
  2. Test 7.12 T2
  3. java实现简单的控制台的计算器
  4. chrles设置断点
  5. PHP中什么是数组
  6. 富文本编辑器tinymce支持从word复制粘贴保留格式和图片的插件wordpaster
  7. CentOS 7.0 配置防火墙
  8. Delphi保存网页中的图片
  9. Altium Designer chapter3总结
  10. 【BASIS系列】SAP BASIS模块-后台配置的传输