内部类用于增强类与类的耦合关系,也是经常会用到的,下面是几种在静态方法中获取内部类的方式
1.内部类设为静态类
public class TestInnerClass {
public static class InnerClass {
public void hi(){
System.out.println("hi");
}
}
public static void main(String[]args){
InnerClass innerClass=new InnerClass();
innerClass.hi();
}
}
2.实例化对象后调用public方法
public class TestInnerClass {
class InnerClass {
public void hi(){
System.out.println("hi");
}
}
public InnerClass getInnerClass(){
InnerClass innerClass =new InnerClass();
return innerClass;
}
public static void main(String[]args){
TestInnerClass testInnerClass=new TestInnerClass();
InnerClass innerClass=testInnerClass.getInnerClass();
innerClass.hi();
}
}
3.直接实例化
public class TestInnerClass {
class InnerClass {
public void hi(){
System.out.println("hi");
}
}
public static void main(String[]args){
InnerClass innerClass=new TestInnerClass().new InnerClass();
innerClass.hi();
}
}
4.利用反射
public class TestInnerClass {
class InnerClass {
public void hi(){
System.out.println("hi");
}
}
public static void main(String[]args){
try {
//1.需要外部类的实例
TestInnerClass testInnerClass=new TestInnerClass();
//2.需要外部类的Class
Class clazz=TestInnerClass.class;
//2.需要内部类的Class
Class c2 = InnerClass.class;
//3.获得内部类的构造器
Constructor con2 = c2.getDeclaredConstructor(clazz);
//4.把构造器设为可用
con2.setAccessible(true);
//5.利用构造器生成内部类实例
InnerClass innerClass1 = (InnerClass) con2.newInstance(testInnerClass);
innerClass1.hi();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}