内部类可以分为以下四种
**
成员内部类:直接定义在类当中的一个类,在类前面没有任何一个修饰符。
局部内部类:定义在方法里的内部类。
匿名内部类:属于局部内部的一种特殊情况。
静态内部类:在内部类前面加上一个static。
**
1.成员内部类
public class Outer { int num = 10; //外部成员方法 public void outMethod() { System.out.println("外部成员方法"); } //成员内部类 class Inner{ int num = 20; //内部类的成员方法 public void innerMethod() { System.out.println("内部成员方法"); System.out.println(num);//内部类的Num System.out.println(Outer.this.num);//外部num outMethod(); } } } //测试类 public class Test { public static void main(String[] args) { //访问内部类方法 Outer.Inner in = new Outer().new Inner(); in.innerMethod(); //访问外部类方法 Outer out = new Outer(); out.outMethod(); } }
2.局部内部类
class Outers { // 外部成员变量 int num = 10; // 外部成员方法 public void outerMethod() { System.out.println("外部成员方法"); } public void function() { // 局部内部类 class Inner { int num = 20; public void innerMethod() { System.out.println("内部类成员方法"); // 访问外部成员 System.out.println(Outers.this.num); outerMethod(); } } // 访问内部类变量 Inner i = new Inner(); System.out.println(i.num); i.innerMethod();// 访问局部方法 } } //测试类 class Tests { public static void main(String[] args) { // 访问内部类对象 Outers o = new Outers(); o.function(); } }
3. 静态内部类
创建对象格式:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
特点:
静态内部类里访问静态变量不需要实例化
class Outer{ static int outer=4;//静态变量 //静态内部类 static class Inner{ int inner = 20; public void innerMethod() { System.out.println("内部类的成员变量"+inner); //静态内部类里访问静态变量不需要实例化 System.out.println("外部类的成员变量"+outer); } } } //测试类 public class Test { public static void main(String[] args) { Outer.Inner oi = new Outer.Inner(); oi.innerMethod(); } }
4.匿名内部类
格式:new 类名/接口名(){};
public abstract class Animal { //抽象方法 abstract void eat(); } //测试类 public class Test { public static void main(String[] args) { Animal o = new Animal() { @Override void eat() { System.out.println("吃肉"); } }; o.eat(); } }