内部类
一般情况下,类和类之间是相互独立的,内部类的意思是打破这种独立,让一个类成为另外一个类的内部成员,和成员变量、成员方法同等级别。采用内部类可以隐藏细节和内部结构,封装性更好,让程序结构更加合理。基本的内部类还可以在一个方法体内定义。
-
非静态内部类
package com.dgut.test.demo7; public class OutClass { private String outName; public void display(){ System.out.println("outClass"); } //内部类 public class InnerClass{ private String innerName; public void display(){ System.out.println("innerClass"); } } }
package com.dgut.test.demo7; public class Test { public static void main(String[] args) throws Exception { OutClass outClass = new OutClass(); outClass.display(); OutClass.InnerClass innerClass = outClass.new InnerClass(); innerClass.display(); } }
非静态内部类的使用就是将内部类当作外部类的一个成员变量/成员方法来使用,所以必须依赖于外部类的对象才能调用,用法和成员变量/成员方法是一致的
在方法体内定义:
package com.dgut.test.demo7; public class OutClass { private String outName; public void display(){ //在方法体内定义 class InnClass{ private String innerName; public void display(){ System.out.println("innerClass"); } } InnClass innClass = new InnClass(); innClass.display(); } }
package com.dgut.test.demo7; public class Test { public static void main(String[] args) throws Exception { OutClass outClass = new OutClass(); outClass.display(); } }
-
静态内部类
静态内部类的构造不需要依赖于外部类对象,类中的所有静态组件都不用依赖于任何对象,可以直接通过类本身来进行构造
package com.dgut.test.demo7; public class OutClass { private String outName; public void display(){ System.out.println("outClass"); } //静态内部类 public static class InnerClass{ private String innerName; public void display(){ System.out.println("innerClass"); } } }
package com.dgut.test.demo7; public class Test { public static void main(String[] args) throws Exception { OutClass outClass = new OutClass(); outClass.display(); OutClass.InnerClass innerClass = new OutClass.InnerClass(); innerClass.display(); } }
-
匿名内部类
package com.dgut.test.demo7; public interface MyInterface { void test(); }
package com.dgut.test.demo7; public class Test { public static void main(String[] args) throws Exception { //匿名内部类 MyInterface myInterface = new MyInterface() { @Override public void test() { System.out.println("test"); } }; myInterface.test(); } }