【JavaSE】局部内部类

举报
兮动人 发表于 2022/03/12 10:50:47 2022/03/12
【摘要】 局部内部类的使用说明:局部内部类是定义在外部类的局部位置,比如方法中,并且有类名。可以直接访问外部类的所有成员,包含私有的。不能添加访问修饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量也可以使用final。作用域:仅仅在定义它的方法或代码块中。局部内部类—访问---->外部类的成员【访问方式:直接访问】外部类—访问---->局部内部...

局部内部类的使用

  • 说明:局部内部类是定义在外部类的局部位置,比如方法中,并且有类名
  1. 可以直接访问外部类的所有成员,包含私有的。
  2. 不能添加访问修饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量也可以使用final
  3. 作用域:仅仅在定义它的方法或代码块中。
  4. 局部内部类—访问---->外部类的成员【访问方式:直接访问】
  5. 外部类—访问---->局部内部类的成员
    访问方式:创建对象,再访问(注意:必须在作用域内)
    (外部类要使用局部类时,在外部类在方法中,可以创建 Inner02 实例对象,然后调用方法即可)
public class LocalInnerClass {
    public static void main(String[] args) {
        //测试
        Outer02 outer02 = new Outer02();
        outer02.m1();
    }
}

class Outer02 {//外部类
    private int n1 = 100;

    private void m2() {
        System.out.println("Outer02 m2()");
    } //私有方法

    public void m1() {//方法
        //1.局部内部类是定义在外部类的局部位置,通常在方法
        //3.不能添加修饰符,但是可以使用final 修饰
        //4.作用域:仅仅定义在它的方法或代码块中

        String name = "xdr";

        final class Inner02 { //局部内部类(本质化仍然还是一个类)
            //2. 可以直接访问外部类的所有成员,包含私有的
            public void f1() {
                //5.局部内部类可以直接访问外部类的成员,如下:访问 外部类 n1 和 m2
                System.out.println("n1" + n1);
                m2();
            }
        }

        {//代码块,局部内部类
            class Inner03 {

            }
        }

        //6. 外部类要使用局部类时,在外部类在方法中,可以创建 Inner02 实例对象,然后调用方法即可
        Inner02 inner02 = new Inner02();
        inner02.f1();

    }
}

在这里插入图片描述

注意:
(1)局部内部类定义在方法中/代码块
(2)作用域在方法体或者代码块中
(3)本质仍然是一个类

  1. 外部其他类—不能访问----->局部内部类(因为局部内部类地位是一个局部变量)
  2. 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用【外部类名.this.成员】去访问
public class LocalInnerClass {
    public static void main(String[] args) {
        //测试
        Outer02 outer02 = new Outer02();
        outer02.m1();
        System.out.println("Outer02 hashcode = " + outer02);
    }
}

class Outer02 {//外部类
    private int n1 = 100;

    private void m2() {
        System.out.println("Outer02 m2()");
    } //私有方法

    public void m1() {//方法
        //1.局部内部类是定义在外部类的局部位置,通常在方法
        //3.不能添加修饰符,但是可以使用final 修饰
        //4.作用域:仅仅定义在它的方法或代码块中

        String name = "xdr";



        final class Inner02 { //局部内部类(本质化仍然还是一个类)
            //2. 可以直接访问外部类的所有成员,包含私有的

            private int n1 = 200;

            public void f1() {
                //5.局部内部类可以直接访问外部类的成员,如下:访问 外部类 n1 和 m2
                System.out.println("n1=" + n1);
                m2();
                System.out.println("==================");
                //7.如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,
                // 则可以使用【`外部类名.this.成员`】去访问
                // 解读:Outer02.this 本质就是外部类的对象,即哪个对象调用了m1,Outer02.this 就是那个对象
                System.out.println("n1=" + n1 + " 外部类的n1= " + Outer02.this.n1);
                //验证
                System.out.println("Outer02.this hashcode = " + Outer02.this);
            }
        }

        {//代码块,局部内部类
            class Inner03 {

            }
        }

        //6. 外部类要使用局部类时,在外部类在方法中,可以创建 Inner02 实例对象,然后调用方法即可
        Inner02 inner02 = new Inner02();
        inner02.f1();

    }
}

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。