java之内部类
如果一个类存在的意义就是为指定的另一个类,可以把这个类放入另一个类的内部。就是把类定义在类的内部的情况就可以形成内部类的形式。A类中又定义了B类,B类就是内部类。B类可以当做A类的一个成员看待。
特点
- 内部类可以直接访问外部类中的成员,包括私有成员
- 外部类要访问内部类的成员,必须要建立内部类的对象
- 在成员位置的内部类是成员内部类
- 在局部位置的内部类是局部内部类
私有成员内部类——被private修饰
// 创建外部类2 class Outer2 { public void callIn() { new Inner2().in(); } // 成员内部类:类里方法外 // 成员内部类被private修饰,表示内部类私有化,外界无法直接访问内部类,也无法创建对象 private class Inner2 { public void in() { System.out.println("内部类"); } } } public class Test_InnerClass { public static void main(String[] args) { // 调用私有内部类的方法 new Outer2().callIn(); } }
静态内部类——被static修饰
// 创建外部类 class Outer { // 内部类被static修饰 消耗内存资源 static class Inner { public void in() { System.out.println("内部类"); } public static void in2() { System.out.println("内部类静态方法"); } } } public class Tes_inner { public static void main(String[] args) { Outer.Inner oi = new Outer.Inner(); oi.in(); // 调用静态内部类的非静态方法 Outer.Inner.in2(); // 调用静态内部类的静态方法 --> 链式编程 } }
匿名内部类
// 定义抽象类 abstract class Animal { public abstract void eat(); public abstract void sleep(); } // 定义接口 interface Fly { void fly(); } public class Test6_LocalInner { public static void main(String[] args) { // 实现抽象类的匿名内部类 new Animal(){ @Override public void eat() { System.out.println("小动物在吃..."); } @Override public void sleep() { System.out.println("小动物在睡..."); } }.sleep(); // 小动物在睡... // 实现接口的内部类 new Fly() { @Override public void fly() { System.out.println("我会飞..."); } }.fly(); } }

浙公网安备 33010602011771号