且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

内部类与无名内部类

更新时间:2022-09-20 23:35:14

内部类:

  内部类是类中的类,内部类也属于类的一个成员。内部类分静态类和实例类,内部类也可以进行继承、实现接口等类可以做的操作。

 实例类:

内部类与无名内部类


内部类也是类中成员,也有静态和实例的区分,所以实例的内部类实际上相当于一个实例成员,要注意的是:实例的内部类不可以写静态的成员。实例内部类基本可以对外类的所有成员进行访问:

内部类与无名内部类


因为实例成员要在new对象时才会分配内存,所以在外类需要构建实例内部类的对象时,必须先得构建加载外类的对象来构建实例内部类的对象。例如:

内部类与无名内部类


静态内部类:

    静态内部类就像类的静态成员一样,使用static关键字声明。静态内部类不可以对外类或其他类的实例成员进行访问,静态内部类也是像静态成员一样在类加载时就加载分配内存,所以不需要创建外类的对象就可以构建静态内部类的对象。例如:

内部类与无名内部类


内部类可以做类可以做的事情,例如继承父类实现接口等:

内部类与无名内部类


内部接口:

  可以在类中声明一个内部接口,这个接口可以被类实现。与普通接口一样唯一的区别就是申请在内部。例如:

内部类与无名内部类



内部抽象类:

  可以在类中声明一个内部抽象类,普通抽象类和纯抽象类都可以,这个抽象类可以被子类继承。与普通抽象类一样唯一的区别就是申请在内部。例如:

内部类与无名内部类


内部类会不会产生class文件呢?:

  只要是声明的是类都会产生一个class文件:

内部类与无名内部类

内部类与无名内部类

会产生图片中这种命名格式的class文件:Five$A.class=外类名$内部类名.class



无名内部类:

    申请一个无名内部类的话,这个类会自动继承于外类,可以重写父类的方法,无名内部类可以写在main方法内,但是不可以写静态成员。例如:

内部类与无名内部类


这种写法也是申请一个无名内部类:

内部类与无名内部类


还可以声明一个自动继承别的类的无名内部类:

内部类与无名内部类


无名内部类也是会产生一个class文件:

内部类与无名内部类

会产生图片中这种命名格式的class文件:Five$1.class=外类名$无名内部类名(用数字表示).class




本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1974346,如需转载请自行联系原作者