总结:
- 一、静态内部类调用外部类资源
- 1、静态内部类不论是否私有,都可以“以单类静态方法的方式来调用外部类的任何资源”
-
调用静态资源:[外部类名.]资源名
-
调用非静态资源:内部类对象.资源名
- 二、外部类调用静态内部类资源
- 1、静态内部类不论是否私有,外部类不论方法是否私有、是否静态,都可以“被外部类任意调用”
-
调用静态资源:内部类名.资源名
-
调用非静态资源:内部类对象.资源名
- 三、其他类调用静态内部类资源
1、 其他类的不论静态还是非静态方法调用内部类资源
可以调用非私有静态内部类中公共的全部资源,私有资源对其他类不可见;私有静态内部类对于其他类不可见 -
调用静态资源:外部类名.内部类名.资源名
-
调用非静态资源:内部类对象.资源名
代码没必要看
静态内部类与外部类互相调用
/*
* 一、内部类调用外部类资源
* 1、静态内部类不论是否私有,都可以“以单类静态方法的方式来调用外部类的任何资源”
* 调用静态资源:[外部类名.]资源名
* 调用非静态资源:内部类对象.资源名
* 二、外部类调用内部类资源
* 1、静态内部类不论是否私有,外部类不论方法是否私有、是否静态,都可以“被外部类任意调用”
* 调用静态资源:内部类名.资源名
* 调用非静态资源:内部类对象.资源名
* */
public class OuterClass {
// 公共属性
// 静态
public static int outerPublicStaticNum;
public static void outerPublicStaticMethod() {
System.out.println("outer public static method");
// 非私有内部类
NonPrivateInnerClass.staticInnerPublicStaticNum = 1;
NonPrivateInnerClass.staticInnerPrivateStaticNum = 1;
NonPrivateInnerClass.staticInnerPrivateInstanceMethod();
NonPrivateInnerClass.staticInnerPublicStaticMethod();
new NonPrivateInnerClass().staticInnerPrivateInstanceNum = 1;
new NonPrivateInnerClass().staticInnerPublicInstanceNum = 1;
new NonPrivateInnerClass().staticInnerPublicInstanceMethod();
new NonPrivateInnerClass().staticInnerPrivateInstanceMethod();
// 私有内部类
PrivateInnerClass.privateStaticInnerPublicStaticNum = 1;
PrivateInnerClass.privateStaticInnerPrivateStaticNum = 1;
PrivateInnerClass.privateStaticInnerPrivateInstanceMethod();
PrivateInnerClass.privateStaticInnerPublicStaticMethod();
new PrivateInnerClass().privateStaticInnerPrivateInstanceNum = 1;
new PrivateInnerClass().privateStaticInnerPublicInstanceNum = 1;
new PrivateInnerClass().privateStaticInnerPublicInstanceMethod();
new PrivateInnerClass().privateStaticInnerPrivateInstanceMethod();
}
// 非静态
public int outerPublicInstanceNum;
public void outerPublicInstanceMethod() {
System.out.println("outer public instance method");
// 非私有内部类
NonPrivateInnerClass.staticInnerPublicStaticNum = 1;
NonPrivateInnerClass.staticInnerPrivateStaticNum = 1;
NonPrivateInnerClass.staticInnerPrivateInstanceMethod();
NonPrivateInnerClass.staticInnerPublicStaticMethod();
new NonPrivateInnerClass().staticInnerPrivateInstanceNum = 1;
new NonPrivateInnerClass().staticInnerPublicInstanceNum = 1;
new NonPrivateInnerClass().staticInnerPublicInstanceMethod();
new NonPrivateInnerClass().staticInnerPrivateInstanceMethod();
// 私有内部类
PrivateInnerClass.privateStaticInnerPublicStaticNum = 1;
PrivateInnerClass.privateStaticInnerPrivateStaticNum = 1;
PrivateInnerClass.privateStaticInnerPrivateInstanceMethod();
PrivateInnerClass.privateStaticInnerPublicStaticMethod();
new PrivateInnerClass().privateStaticInnerPrivateInstanceNum = 1;
new PrivateInnerClass().privateStaticInnerPublicInstanceNum = 1;
new PrivateInnerClass().privateStaticInnerPublicInstanceMethod();
new PrivateInnerClass().privateStaticInnerPrivateInstanceMethod();
}
// 私有属性
// 静态
private static int outerPrivateStaticNum;
private static void outerPrivateStaticMethod() {
System.out.println("outer private static method");
// 非私有内部类
NonPrivateInnerClass.staticInnerPublicStaticNum = 1;
NonPrivateInnerClass.staticInnerPrivateStaticNum = 1;
NonPrivateInnerClass.staticInnerPrivateInstanceMethod();
NonPrivateInnerClass.staticInnerPublicStaticMethod();
new NonPrivateInnerClass().staticInnerPrivateInstanceNum = 1;
new NonPrivateInnerClass().staticInnerPublicInstanceNum = 1;
new NonPrivateInnerClass().staticInnerPublicInstanceMethod();
new NonPrivateInnerClass().staticInnerPrivateInstanceMethod();
// 私有内部类
PrivateInnerClass.privateStaticInnerPublicStaticNum = 1;
PrivateInnerClass.privateStaticInnerPrivateStaticNum = 1;
PrivateInnerClass.privateStaticInnerPrivateInstanceMethod();
PrivateInnerClass.privateStaticInnerPublicStaticMethod();
new PrivateInnerClass().privateStaticInnerPrivateInstanceNum = 1;
new PrivateInnerClass().privateStaticInnerPublicInstanceNum = 1;
new PrivateInnerClass().privateStaticInnerPublicInstanceMethod();
new PrivateInnerClass().privateStaticInnerPrivateInstanceMethod();
}
// 非静态
private int outerPrivateInstanceNum;
private void outerPrivateInstanceMethod() {
System.out.println("outer private Instance method");
// 非私有内部类
NonPrivateInnerClass.staticInnerPublicStaticNum = 1;
NonPrivateInnerClass.staticInnerPrivateStaticNum = 1;
NonPrivateInnerClass.staticInnerPrivateInstanceMethod();
NonPrivateInnerClass.staticInnerPublicStaticMethod();
new NonPrivateInnerClass().staticInnerPrivateInstanceNum = 1;
new NonPrivateInnerClass().staticInnerPublicInstanceNum = 1;
new NonPrivateInnerClass().staticInnerPublicInstanceMethod();
new NonPrivateInnerClass().staticInnerPrivateInstanceMethod();
// 私有内部类
PrivateInnerClass.privateStaticInnerPublicStaticNum = 1;
PrivateInnerClass.privateStaticInnerPrivateStaticNum = 1;
PrivateInnerClass.privateStaticInnerPrivateInstanceMethod();
PrivateInnerClass.privateStaticInnerPublicStaticMethod();
new PrivateInnerClass().privateStaticInnerPrivateInstanceNum = 1;
new PrivateInnerClass().privateStaticInnerPublicInstanceNum = 1;
new PrivateInnerClass().privateStaticInnerPublicInstanceMethod();
new PrivateInnerClass().privateStaticInnerPrivateInstanceMethod();
}
// 非私有静态内部类
static class NonPrivateInnerClass {
// 公共资源
// 静态
public static int staticInnerPublicStaticNum;
public static void staticInnerPublicStaticMethod() {
System.out.println("static Inner Public Static Method");
// 外部类静态资源 可直接使用外部类名调
outerPrivateStaticMethod();
outerPublicStaticMethod();
OuterClass.outerPrivateStaticNum = 1;
OuterClass.outerPublicStaticNum = 1;
// 外部类非静态资源 使用外部类对象调用
new OuterClass().outerPublicInstanceNum = 1;
new OuterClass().outerPrivateInstanceNum = 1;
new OuterClass().outerPublicInstanceMethod();
new OuterClass().outerPrivateInstanceMethod();
}
// 非静态
public int staticInnerPublicInstanceNum;
public void staticInnerPublicInstanceMethod() {
System.out.println("static Inner Public Instance Method");
// 外部类静态资源 可直接使用外部类名调
outerPrivateStaticMethod();
outerPublicStaticMethod();
OuterClass.outerPrivateStaticNum = 1;
OuterClass.outerPublicStaticNum = 1;
// 外部类非静态资源 使用外部类对象调用
new OuterClass().outerPublicInstanceNum = 1;
new OuterClass().outerPrivateInstanceNum = 1;
new OuterClass().outerPublicInstanceMethod();
new OuterClass().outerPrivateInstanceMethod();
}
// 私有资源
// 静态
private static int staticInnerPrivateStaticNum;
private static void staticInnerPrivateStaticMethod() {
System.out.println("static Inner Private Static Method");
// 外部类静态资源 可直接使用外部类名调
outerPrivateStaticMethod();
outerPublicStaticMethod();
OuterClass.outerPrivateStaticNum = 1;
OuterClass.outerPublicStaticNum = 1;
// 外部类非静态资源 使用外部类对象调用
new OuterClass().outerPublicInstanceNum = 1;
new OuterClass().outerPrivateInstanceNum = 1;
new OuterClass().outerPublicInstanceMethod();
new OuterClass().outerPrivateInstanceMethod();
}
// 非静态
private int staticInnerPrivateInstanceNum;
private static void staticInnerPrivateInstanceMethod() {
System.out.println("static Inner Private Instance Method");
// 外部类静态资源 可直接使用外部类名调
outerPrivateStaticMethod();
outerPublicStaticMethod();
OuterClass.outerPrivateStaticNum = 1;
OuterClass.outerPublicStaticNum = 1;
// 外部类非静态资源 使用外部类对象调用
new OuterClass().outerPublicInstanceNum = 1;
new OuterClass().outerPrivateInstanceNum = 1;
new OuterClass().outerPublicInstanceMethod();
new OuterClass().outerPrivateInstanceMethod();
}
}
// 私有静态内部类
private static class PrivateInnerClass {
// 公共资源
// 静态
public static int privateStaticInnerPublicStaticNum;
public static void privateStaticInnerPublicStaticMethod() {
System.out.println("private static Inner Public Static Method");
// 外部类静态资源 可直接使用外部类名调
outerPrivateStaticMethod();
outerPublicStaticMethod();
OuterClass.outerPrivateStaticNum = 1;
OuterClass.outerPublicStaticNum = 1;
// 外部类非静态资源 使用外部类对象调用
new OuterClass().outerPublicInstanceNum = 1;
new OuterClass().outerPrivateInstanceNum = 1;
new OuterClass().outerPublicInstanceMethod();
new OuterClass().outerPrivateInstanceMethod();
}
// 非静态
public int privateStaticInnerPublicInstanceNum;
public void privateStaticInnerPublicInstanceMethod() {
System.out.println("private static Inner Public Instance Method");
// 外部类静态资源 可直接使用外部类名调
outerPrivateStaticMethod();
outerPublicStaticMethod();
OuterClass.outerPrivateStaticNum = 1;
OuterClass.outerPublicStaticNum = 1;
// 外部类非静态资源 使用外部类对象调用
new OuterClass().outerPublicInstanceNum = 1;
new OuterClass().outerPrivateInstanceNum = 1;
new OuterClass().outerPublicInstanceMethod();
new OuterClass().outerPrivateInstanceMethod();
}
// 私有资源
// 静态
private static int privateStaticInnerPrivateStaticNum;
private static void privateStaticInnerPrivateStaticMethod() {
System.out.println("private static Inner Private Static Method");
// 外部类静态资源 可直接使用外部类名调
outerPrivateStaticMethod();
outerPublicStaticMethod();
OuterClass.outerPrivateStaticNum = 1;
OuterClass.outerPublicStaticNum = 1;
// 外部类非静态资源 使用外部类对象调用
new OuterClass().outerPublicInstanceNum = 1;
new OuterClass().outerPrivateInstanceNum = 1;
new OuterClass().outerPublicInstanceMethod();
new OuterClass().outerPrivateInstanceMethod();
}
// 非静态
private int privateStaticInnerPrivateInstanceNum;
private static void privateStaticInnerPrivateInstanceMethod() {
System.out.println("private static Inner Private Instance Method");
// 外部类静态资源 可直接使用外部类名调
outerPrivateStaticMethod();
outerPublicStaticMethod();
OuterClass.outerPrivateStaticNum = 1;
OuterClass.outerPublicStaticNum = 1;
// 外部类非静态资源 使用外部类对象调用
new OuterClass().outerPublicInstanceNum = 1;
new OuterClass().outerPrivateInstanceNum = 1;
new OuterClass().outerPublicInstanceMethod();
new OuterClass().outerPrivateInstanceMethod();
}
}
}
其他类调用静态内部类资源
/*
*一、其他类静态方法调用内部类资源
* 1、可以调用非私有静态内部类中公共的全部资源,私有资源对其他类不可见;私有静态内部类对于其他类不可见
* 调用静态资源:外部类名.内部类名.资源名
* 调用非静态资源:内部类对象.资源名
* 二、其他类非静态方法调用内部类资源
* 1、同上
* */
import org.junit.Test;
public class TestClass {
//外部类静态方法
public static void main(String[] args) {
//非私有静态内部类
//公共资源
//静态资源
OuterClass.NonPrivateInnerClass.staticInnerPublicStaticNum = 1;
OuterClass.NonPrivateInnerClass.staticInnerPublicStaticMethod();
//非静态资源
new OuterClass.NonPrivateInnerClass().staticInnerPublicInstanceMethod();
new OuterClass.NonPrivateInnerClass().staticInnerPublicInstanceNum = 1;
//私有资源
//静态资源
// OuterClass.NonPrivateInnerClass.staticInnerPrivateStaticNum = 1;
// OuterClass.NonPrivateInnerClass.staticInnerPrivateStaticMethod();
//非静态资源
// new OuterClass.NonPrivateInnerClass().staticInnerPrivateInstanceNum = 1;
// new OuterClass.NonPrivateInnerClass().staticInnerPrivateInstanceMethod();
//私有静态内部类
// OuterClass.PrivateInnerClass privateInnerClass = new OuterClass.PrivateInnerClass();
//公共资源
//静态资源
//非静态资源
//私有资源
//静态资源
//非静态资源
}
//外部类非静态方法
// @Test
public void otherInstanceMethod() {
//非私有静态内部类
//公共资源
//静态资源
OuterClass.NonPrivateInnerClass.staticInnerPublicStaticNum = 1;
OuterClass.NonPrivateInnerClass.staticInnerPublicStaticMethod();
//非静态资源
new OuterClass.NonPrivateInnerClass().staticInnerPublicInstanceNum = 1;
new OuterClass.NonPrivateInnerClass().staticInnerPublicInstanceMethod();
//私有资源
//静态资源
// OuterClass.NonPrivateInnerClass.staticInnerPrivateStaticNum = 1;
// OuterClass.NonPrivateInnerClass.staticInnerPrivateStaticMethod();
//非静态资源
// new OuterClass.NonPrivateInnerClass().staticInnerPrivateInstanceNum = 1;
// new OuterClass.NonPrivateInnerClass().staticInnerPrivateInstanceMethod();
//私有静态内部类
// OuterClass.PrivateInnerClass privateInnerClass = new OuterClass.PrivateInnerClass();
//公共资源
//静态资源
//非静态资源
//私有资源
//静态资源
//非静态资源
}
}