内部类(Nested Class) 嵌套类:
(1)静态内部类
(2)非静态内部类:
- 普通内部类(成员内部类):在一个外部类中直接定义的内部类。
- 匿名内部类:
- 方法内部类:在一个方法(外部类中的方法)或代码块中定义的内部类。
内部类仍然是一个独立的类,在编译之后内部类会被单独编译成独立的.class文件,但是前面冠以外部类的类名和$符号。
内部类可以使用修饰符(public ,protected,default,private)。
通过代码了解一下:
package com.etc; import java.util.Date; @SuppressWarnings("all") public class NestedClassDemo { public static void main(String[] args) { Test4 test=new Test4(); test.test(); //不相关的内部类调用及实例化 Test4.Test t1=new Test4.Test(); //成员内部类的实例必须借助外部类 Test4.Test2 t2=test.new Test2(); System.out.println("不相关内部类:"+t1.getClass()); System.out.println("成员内部类:"+t2.getClass()); } } @SuppressWarnings("all") class Test4{ static int a=10; int b=20; //静态内部类 static class Test{ private void printA() { System.out.println(a); //静态内部类中不能调用外部类的普通成员 // System.out.println(b); } } //普通内部类 class Test2{ //成员内部类中不能有静态的成员,除非声明为final,并且只能是编译器可以确定值的常量表达式 int a=10; final static int b=20; /*final static Date date=new Date();*/ } //方法内部类,局部内部类 public void test() { class Test3{ } //匿名内部类也可以放在方法内部类里面 Runnable run=new Runnable() { @Override public void run() { System.out.println("测试1"); } }; } //定义了匿名内部类的类体,同时创建了一个匿名内部类的实例。 Runnable run=new Runnable() { @Override public void run() { System.out.println("测试2"); } }; }
运行效果截图:
ps:文章待完善,后续补全。