java静态内部类、外部类、其他类资源调用说明

总结:

  • 一、静态内部类调用外部类资源
  • 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();
        //公共资源
        //静态资源
        //非静态资源
        //私有资源
        //静态资源
        //非静态资源
    }
}
  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的Y同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值