Java中的内部类 普通嵌套类 局部内部类 匿名内部类 静态内部类 浅析
2012-02-09 16:10
549 查看
import java.util.Date; import java.util.Random; public class InnerClassTest { /** * 静态方法只能创建静态内部类的对象 * @param args */ public static void main(String[] args) { InnerClassTest ict = new InnerClassTest(); ict.say("Test"); InnerClass2 ic2 = new InnerClass2(); //InnerClass1 ic1 = new InnerClass1();//错误 InnerClassTest.InnerClass1 icic1 = ict.new InnerClass1(); } /** * 非静态方法可以创建各种内部类对象 * 局部内部类和匿名内部类能够访问方法中的final参数或者是final的局部变量 * @param var final类型的局部参数 */ public void say(final String var){ final int[] array = new int[1]; /** * 局部内部类 不能有修饰符 * 对外界完全隐蔽 * @author Administrator * */ class InnerClass3 { public void say() { System.out.println("InnerClass3 " + id); System.out.println("InnerClass3 " + InnerClassTest.this.id); System.out.println("InnerClass3 " + nextId); array[0] = 1; System.out.println(var); } } InnerClass3 ic3 = new InnerClass3(); InnerClass1 ic1 = new InnerClass1(); InnerClass2 ic2 = new InnerClass2(); /** * 匿名内部类 不能有构造器 一般是实现某个接口或者继承某个类 * 可以把参数传递给父类的构造器 * 返回一个实现了某个接口或者继承了某个类的新类的一个对象 */ Date newDate = new Date(){ public String toString() { System.out.println("InnerClass3 " + id); System.out.println("InnerClass3 " + InnerClassTest.this.id); System.out.println("InnerClass3 " + nextId); array[0] = 1; System.out.println(var); return super.toString() + " 匿名内部类"; } }; ic1.say();ic2.say();ic3.say(); System.out.println(newDate.toString()); } { id = nextId; nextId ++; } static { nextId = new Random().nextInt(1000); } public class InnerClass1 { public void say() { System.out.println("InnerClass1 " + id); System.out.println("InnerClass1 " + InnerClassTest.this.id); System.out.println("InnerClass1 " + nextId); } } public static class InnerClass2 { public void say() { //System.out.println(id); System.out.println("InnerClass2 " + nextId); } } /** * 静态内部类只能访问外围类的static实例域 * 其他内部类两者都能访问 * 访问方式: * 1.直接用变量名访问 * 2.InnerClass.this.id 或 InnerClass.nextId */ private int id; private static int nextId; } class OuterClass { public void say() { /*创建 public 静态内部类对象*/ InnerClassTest.InnerClass2 icic2 = new InnerClassTest.InnerClass2(); /*创建 public 普通静态内部类*/ /*必须先创建外围类对象*/ InnerClassTest ict = new InnerClassTest(); InnerClassTest.InnerClass1 icic1 = ict.new InnerClass1(); } }
相关文章推荐
- Java静态内部类、匿名内部类、成员式内部类和局部内部类
- Java基础_内部类、静态内部类、成员内部类、局部内部类、匿名内部类 (转)
- Java--类和接口--常规内部类,静态内部类,局部内部类,匿名内部类,抽象类,接口
- Java多继承方法(名)冲突和成员内部类、局部内部类、静态内部类、匿名内部类
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
- Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)
- Java多继承方法(名)冲突和成员内部类、局部内部类、静态内部类、匿名内部类
- Java知多少(37)静态内部类、匿名内部类、成员式内部类和局部内部类
- Java静态内部类、匿名内部类、成员式内部类和局部内部类
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
- Java 内部类详解(成员内部类、静态内部类、局部内部类、匿名内部类)
- 实训java第十三课 内部类 匿名内部类 局部内部类 静态内部类 集合LinkedList
- Java静态内部类、匿名内部类、成员式内部类和局部内部类
- 面向对象高级特性===Java静态内部类、匿名内部类、成员式内部类和局部内部类
- java入门教程-5.2Java静态内部类、匿名内部类、成员式内部类和局部内部类
- 牛客网Java刷题知识点之什么是内部类、为什么要使用内部类、内部类如何使用外部类的属性和方法、成员内部类、局部内部类、静态内部类、匿名内部类
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
- Lesson_for_java_day18--java中的内部类(成员内部类、局部内部类,静态内部类,匿名内部类)
- Java静态内部类、匿名内部类、成员式内部类和局部内部类