总结
1.外部类调用内部类的属性和方法
(1)外部类内部调用内部类中的属性和方法
a. 非静态属性和非静态方法: 内部类实例.属性(方法)
b. 静态属性和静态方法: 内部类.属性(方法)
(2)外部类外部调用内部类中的属性和方法
a. 非静态属性和非静态方法: 外部类实例.内部类.属性(方法)
b. 静态属性和静态方法: 外部类.内部类.属性(方法)
2.内部类调用外部类中的属性和方法
a. 非静态属性和非静态方法:可以通过创建外部类实例的方法来调用
外部类实例.属性(方法)
b. 内部类可以直接调用外部类中的静态属性和静态方法
示例
public class Test {
// 静态内部类
public static void main(String[] args) {
// 1.创建内部类实例 不在外部类中 需要用 外部类.内部类
ExternalClass.StaticInnerClass staticInnerClass = new ExternalClass.StaticInnerClass();
// 外部类内部调用内部类中的属性和方法
// Non-static field 'id' cannot be referenced from a static context
// System.out.println(StaticInnerClass.id);
// Non-static method 'show()' cannot be referenced from a static context
// StaticInnerClass.show();
// 非静态属性和非静态方法 外部类实例.内部类.属性(方法)
System.out.println(staticInnerClass.number);
// 'id' has private access in 'ExternalClass.StaticInnerClass'
// System.out.println(staticInnerClass.id);
staticInnerClass.show();
// 'name' has private access in 'ExternalClass.StaticInnerClass'
// System.out.println(ExternalClass.StaticInnerClass.name);
// 静态属性和静态方法 外部类.内部类.属性(方法)
System.out.println(ExternalClass.StaticInnerClass.address);
ExternalClass.StaticInnerClass.display();
}
}
public class ExternalClass {
private String var;
private static String staticVar;
public void method(){
}
public static void staticMethod(){
}
// 2.创建内部类实例 在外部类中
StaticInnerClass staticInnerClass = new StaticInnerClass();
// 外部类内部调用内部类中的属性和方法
public void test(){
// Non-static field 'id' cannot be referenced from a static context
// System.out.println(StaticInnerClass.id);
// Non-static method 'show()' cannot be referenced from a static context
// StaticInnerClass.show();
// 非静态属性和非静态方法 内部类实例.属性(方法)
System.out.println(staticInnerClass.id);
staticInnerClass.show();
// 静态属性和静态方法 内部类.属性(方法)
System.out.println(StaticInnerClass.name);
StaticInnerClass.display();
}
public static class StaticInnerClass{
private int id;
int number;
private static String name;
static String address;
// 内部类内部调用外部类中的属性和方法
public void show(){
// 非静态属性和非静态方法
// Non-static field 'var' cannot be referenced from a static context
// System.out.println(var);
// Non-static method 'method()' cannot be referenced from a static context
// method();
// 可以通过创建外部类实例的方法来调用 外部类实例.属性(方法)
ExternalClass externalClass = new ExternalClass();
System.out.println(externalClass.var);
externalClass.method();
// 内部类可以直接调用外部类中的静态属性和静态方法
System.out.println(staticVar);
staticMethod();
}
public static void display(){
}
}
}