Java基础 - 内部类05 - 静态内部类详解

1.什么是静态内部类

定义 : 定义在外部类的成员位置,且有static修饰的类;

2.静态内部类的特性(关键)

*          1.可以直接访问外部类的所有静态成员,包含私有的,但不能访问非静态成员;
 *         2.可以添加任意的修饰符,public、private、默认、protected,
 *           因为静态内部类的地位就是外部类的一个成员;
 *         3.作用域 : 与外部类的其他成员一致,是整个的类体;
 *         4.静态内部类 访问 外部类 的【静态】属性/方法 : 直接访问即可;
 *         5.外部类 访问 静态内部类 : 通过创建对象再访问的方式;
 *         6.外部其他类 访问 静态内部类 :
 *            方式一 : 直接通过外部类获取成员内部类对象;
 *            方式二 : 通过外部类的方法,获取一个成员内部类的对象。
 *          7.外部类 和 静态内部类的 成员重名时,静态内部类中访问重名的成员,默认遵循就近原则,
 *            如果 静态内部类 就是想访问 外部类的重名成员,则使用语法 : 【外部类名.静态成员名称】

3.案例代码

3.1 静态内部类的定义代码

各位coder一定要跟着上面的特性来看这一段代码。

package com.northcastle.D_jingtai_innerClass;

/**
 * author : northcastle
 * createTime:2022/2/11
 */
public class JingtaiInnerClass {
    //4.一个静态内部类
    public static class innerClass{
        //4.1静态内部类的属性
        private String field0101 = "静态内部类的属性:filed0101";
        private static String field02 = "静态内部类的属性 : field02";

        //4.2静态内部类的构造器
        public innerClass() {
        }
        public innerClass(String field0101) {
            this.field0101 = field0101;
        }

        //4.3静态内部类的方法
        //4.3.1 静态内部类的一个普通方法
        public void innerMethod01(){
            System.out.println("静态内部类的一个普通的方法 : innerMethod01");
        }
        //4.3.2 静态内部类的一个普通的静态方法
        public static void innerMethod02(){
            System.out.println("静态内部类的一个普通的静态方法 : innerMethod02");
        }
        //4.3.3 静态内部类的一个使用外部类的方法
        public void innerMethod03(){
            System.out.println("静态内部类的一个使用外部类的成员的方法 : innerMethod03");
            System.out.println("静态内部类的成员field0101 : "+field0101);
            System.out.println("静态内部类的静态成员field02 : "+field02); // 静态内部类自己的field02
            //System.out.println("外部类的普通属性field01 : "+field01); // 不可访问,因为field01 不是静态成员
            System.out.println("外部类的静态属性field03 : "+field03);
            System.out.println("外部类的重名静态属性field02 : "+ JingtaiInnerClass.field02);
            System.out.println("下面访问外部类的方法 : ");
            method02(); // 同样只能访问外部类的静态方法
        }
    }
    //1.外部类的属性:普通属性、静态属性
    private String field01 = "外部类的普通属性 field01";
    private static String field02 = "外部类的静态属性 field02";
    private static String field03 = "外部类的静态属性 field03";

    //2.外部类的构造器
    public JingtaiInnerClass() {
    }
    public JingtaiInnerClass(String field01) {
        this.field01 = field01;
    }
    //3.外部类的方法
    //3.1 一个普通的外部类的方法
    public void method01(){
        System.out.println("外部类的普通方法 : method01");
    }
    //3.2 一个静态的外部类的方法
    public static void method02(){
        System.out.println("外部类的静态方法 : method02");
    }
    //3.3 一个使用静态内部类的外部类方法
    public void method03(){
        System.out.println("外部类的方法:method03 : 这个方法中使用静态内部类");

        //1.创建静态内部类的对象
        innerClass innerClass = new innerClass();
        //2.通过对象调用静态内部类的普通方法
        innerClass.innerMethod01();
        //3.直接通过【外部类.静态内部类.静态方法】来调用静态内部类的静态方法
        JingtaiInnerClass.innerClass.innerMethod02();
    }

    //4.提供一个方法,返回一个静态内部类的对象
    public innerClass getInnerClassObject(){
        return new innerClass();
    }
}

3.2 静态内部类的使用代码

package com.northcastle.D_jingtai_innerClass;

/**
 * author : northcastle
 * createTime:2022/2/11
 */
public class Application {
    public static void main(String[] args) {
        //1.演示外部类使用静态内部类的方法
        JingtaiInnerClass jingtaiInnerClass = new JingtaiInnerClass();
        jingtaiInnerClass.method01();//普通的方法
        jingtaiInnerClass.method03(); // 就是这个方法中使用了静态内部类
        System.out.println("=================================");
        //2.演示外部其他类获取静态内部类对象 的两种方式
        //2.1 方式一 : 直接通过类获取 静态内部类的对象
        JingtaiInnerClass.innerClass innerClass01 = new JingtaiInnerClass.innerClass();
        //2.2 方式二 : 通过外部类的方法获取 静态内部类的对象
        JingtaiInnerClass jingtaiInnerClass02 = new JingtaiInnerClass();
        JingtaiInnerClass.innerClass innerClass02 = jingtaiInnerClass02.getInnerClassObject();
        System.out.println("=================================");
        //3.演示静态内部类使用外部类的属性 : 直接使用2中获取到的对象
        innerClass01.innerMethod01();
        innerClass01.innerMethod03();
        System.out.println("=================================");
    }
}

3.3 运行结果

在这里插入图片描述

4.完成

Congratulations!
You are one step closer to success!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值