内部类
定义:
内部类就是在一个类的内部再定义一个类。
-
成员内部类
- 外部类对象.new 内部类
- 内部类可以直接访问外部类的私有成员变量和私有方法
public class Outer{ private int id = 10; private void out(){ System.out.println("外部类方法"); } public class Inner{ public void in(){ System.out.println(""内部类方法"); } public void getId(){ System.out.println(id);//访问外部类的私有成员变量id out();//访问外部类的私有方法out() } } public static void main(String[] args){ Outer outer = new Outer(); outer.Inner inner = outer.new Inner();//创建内部类对象 inner.in(); //new Outer().new inner().in(); } }
-
局部内部类
- 方法内定义和构造
- 内部类可以直接访问外部类的私有成员变量和私有方法
public class Outer{ private int id = 10; private void f2() { System.out.println("外部类方法2"); } public void f1() { System.out.println("外部类方法1"); class Inner{ public void in(){ f2();//访问外部类私有方法 System.out.println("内部类方法"); System.out.println("id = " + id);//访问外部类私有属性 } } Inner inner = new Inner(); inner.in(); } public static void main(String[] args) { Demo02 d2 = new Demo02(); d2.f1(); } }
-
静态内部类
public class Outer{ public static class Inner{ public void in(){ System.out.println(""内部类方法"); } } public static void main(String[] args){ Inner inner = new Inner(); inner.in(); } }
-
匿名内部类
匿名内部类必须实现一个接口或者继承一个父类
public class Outer{ interface MyInterface{ void f1(); } public static void main(String[] args){ (new MyInterface(){ @override public void f1(){ System.out.println("匿名内部类方法!"); } }).f1(); } }