内部类/内部接口那点事
2014-09-15 20:08
253 查看
先上总结:
1、一个类的静态内部类,因为是静态的,所有不需要有包裹类的对象就可以实例化这个内部类(new Out.Inner()),所以在包裹类的静态方法中可以直接new这个内部类,而且静态内部类不可以访问包裹类的成员变量。
2、一个类的非静态内部类,必须要先有包裹类的对象才能实例化这个内部类(new Out().new Inner()),且,在包裹类的静态方法中不能实例化非静态内部类(原因:非静态内部类可以访问包裹类的的成员变量,但包裹类的静态方法不可以)。
3、静态接口,这个我经常用,以前都是迷迷糊糊的就用了,不管写不写成static一样用,原因是内部接口不管写不写static它都是static的。
测试代码:
1、一个类的静态内部类,因为是静态的,所有不需要有包裹类的对象就可以实例化这个内部类(new Out.Inner()),所以在包裹类的静态方法中可以直接new这个内部类,而且静态内部类不可以访问包裹类的成员变量。
2、一个类的非静态内部类,必须要先有包裹类的对象才能实例化这个内部类(new Out().new Inner()),且,在包裹类的静态方法中不能实例化非静态内部类(原因:非静态内部类可以访问包裹类的的成员变量,但包裹类的静态方法不可以)。
3、静态接口,这个我经常用,以前都是迷迷糊糊的就用了,不管写不写成static一样用,原因是内部接口不管写不写static它都是static的。
测试代码:
public class InnerClass { private int i; public static void main(String[] args) { // new Cls1().func(); // error new Cls2().func(); } // 非静态内部类, 在他包裹类的静态方法中不能直接new // 因为内部类可以访问包裹类的成员变量,而在上面的静态方法中不能访问成员变量 // 所以如果可以new,就违背了自身 class Cls1 { public void func() { i++; System.out.println("cls1"); } } // 静态内部类, 可以在包裹类的静态方法中直接new // 因为他是静态的, 可以在不实例化包裹类的前提下实例化 static class Cls2 { public void func() { // i++; // 不可以访问, 因为该类可以在包裹类未实例化的前提上实例化 System.out.println("cls2"); } } // 一个类的内部接口本身就是静态的 public interface If { } } class Cls3 { public void test() { new InnerClass().new Cls1().func(); // 对于非静态内部类,必须先有包裹类的对象才能有内部类的对象 new InnerClass.Cls2().func(); // 静态的不需要 } public class Ifimpl implements InnerClass.If { } }
相关文章推荐
- 内部类、内部接口
- new 接口{内部实现方法} 转为 匿名内部类
- 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类
- 内部类的作用?1、抽象类中包含一个内部接口如何实现与调用 ;2、接口中包含一个内部抽象类如何调用
- 内部类与内部接口
- 内部接口与内部类的体会
- JASE总结--09(1.抽象类2.接口3.Debug4.垃圾回收机制5.内部类6.方法内部类7.静态内部类)
- 内部类、内部接口
- java 四种内部类和内部接口
- Java--类和接口--常规内部类,静态内部类,局部内部类,匿名内部类,抽象类,接口
- 内部类、内部接口与继承的加深理解
- 内部类、匿名内部类、内部接口比较
- 【JAVA】内部类,内部接口
- 学习笔记 Java_ch04_内部类内部接口 2014.7.27
- 外部类、外部接口、类的内部类、类的内部接口、接口的内部类、接口的内部接口 修饰符
- 【匿名内部类】通过内部类匿名实现接口
- 内部类以及内部接口的实例化
- JAVA的内部类(成员内部类)
- 黑马程序员-- 多态、接口、内部类 大总结
- 匿名内部类,成员内部类 操作 final变量