Java内部类学习小结
来源:互联网 发布:淘宝搜索不到东西 编辑:程序博客网 时间:2024/05/17 05:15
一. 分类
- 静态内部类(类内部类)
- 成员内部类(实例内部类)
- 方法内部类
- 匿名内部类
二. 静态内部类
- 不能引用外部类的实例变量和实例方法
- 实例创建方式
public class OutStaticInner { Inner inner = new Inner(); static class Inner { OutStaticInner outStaticInner = new OutStaticInner(); }}class NewInner { OutStaticInner.Inner inner = new OutStaticInner.Inner();}
三. 成员内部类
- 不能引用外部类的类变量和类方法
- 不能有类成员变量和方法,可以有常量。
如果外部类的类方法m中或者类变量i的初始赋值,引用了内部类的类成员,那么在调用m或者初始化i时会导致内部类的初始化,此时外部类的实例可能还没有创建。而成员内部类是与其外部类实例绑定的,这显然互相矛盾。 - 成员内部类是闭包
- 实例创建方式
public class OutInstanceInner { Inner inner = new Inner(); class Inner { OutInstanceInner outInstanceInner = new OutInstanceInner(); }}class NewInsInner { OutInstanceInner.Inner inner = new OutInstanceInner().new Inner();}
四. 方法内部类
- 不能引用外部类的类变量和类方法
- 不能有static的成员变量和方法,可以有常量。
- 可用修饰符和方法变量一致(final)
- 不能引用外围方法的局部变量,除非是final的变量。
- 外围方法的生命周期和方法内部类不一致。
- 方法内部类会将外围方法的局部变量在自己内部拷贝一份,如果值发生改变,会导致内外不一致的现象。
- 实例的创建方式,方法外部无法创建方法内部类的实例。
public class OutMethodInner { void method() { class Inner { OutMethodInner outMethodInner = new OutMethodInner(); } Inner inner = new Inner(); }}
五. 匿名内部类
- 根据匿名内部类所在位置决定其属性
- 分类
- 继承式
- 接口式
- 参数式
public class AnonymousInner { static void run(Interface face) { face.method(); } public static void main(String[] args) { //继承式 new Inherit() { @Override void method() { System.out.println("inherit method."); } }.method(); //接口式 new Interface() { @Override public void method() { System.out.println("implement method."); } }.method(); //参数式 run(new Interface() { @Override public void method() { System.out.println("parameter method."); } }); }}class Inherit { void method() { System.out.println("method."); }}interface Interface { void method();}
0 0
- Java内部类学习小结
- 内部类学习小结
- java内部类小结
- Java内部类小结
- java内部类小结
- Java内部类小结
- Java 内部类小结
- Java内部类小结
- Java内部类小结
- java内部类小结
- Java内部类小结
- Java内部类小结
- java 内部类小结
- java内部类小结
- Java内部类小结
- java内部类、静态内部类 小结
- java内部类、静态内部类 小结
- java内部类、静态内部类 小结
- delphi7丢失控件面板的处理方法
- xcode的archives里重复缓存项目
- 枚举常见的使用方法
- 在线航班预定服务: Google Flights的交互设计
- [读书笔记]关于iOS各方面的安全性问题
- Java内部类学习小结
- 论文阅读:ICML 2016 Large-Margin Softmax Loss for Convolutional Neural Networks
- 网络编程六:https请求(双向验证)
- 一篇让你真正理解 Laravel IoC 模式的文章
- sublimeText 搭建react-native 开发环境
- android应用方法数超出
- Java 实现Comparable接口踩坑记录
- Android 蓝牙技术 带你实现终端间数据传输
- 子页面eventMap管理事件绑定不起作用