前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JavaSE】局部内部类

【JavaSE】局部内部类

原创
作者头像
兮动人
发布2022-03-27 00:43:53
2910
发布2022-03-27 00:43:53
举报
文章被收录于专栏:兮动人的博客兮动人的博客

局部内部类的使用

  • 说明:局部内部类是定义在外部类的局部位置,比如方法中,并且有类名
  • 可以直接访问外部类的所有成员,包含私有的。
  • 不能添加访问修饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量也可以使用final
  • 作用域:仅仅在定义它的方法或代码块中。
  • 局部内部类---访问---->外部类的成员【访问方式:直接访问】
  • 外部类---访问---->局部内部类的成员 访问方式:创建对象,再访问(注意:必须在作用域内) (外部类要使用局部类时,在外部类在方法中,可以创建 Inner02 实例对象,然后调用方法即可)
代码语言:java
复制
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.成员】去访问
代码语言:java
复制
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();

    }
}
在这里插入图片描述
在这里插入图片描述

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 局部内部类的使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档