Java面向对象(OOP)--内部类(局部内部类)

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面向对象(OOP)--内部类(局部内部类)相关的知识,希望对你有一定的参考价值。

1. 局部内部类

  • 局部内部类是在一个方法内部声明的一个类
  • 局部内部类中可以访问外部类的成员变量及方法
  • 局部内部类中如果要访问该内部类所在方法中的局部变量,那么这个局部变量就必须是final修饰的

示例:

public class Outer {
    private int id;

    //在method01方法中有一个Inner内部类,这个内部类就称为局部内部类
    public void method01() {
        class Inner {
            public void in() {
                System.out.println("这是局部内部类");
            }
        }
    }
}

局部内部类一般的作用跟在成员内部类中总结的差不多,但是有两个要注意的地方:

  1. 在局部内部类中,如果要访问局部变量,那么该局部变量要用final修饰

为什么需要使用final?

  • final修饰变量:变为常量,会在常量池中放着,逆向思维想这个问题,如果不实用final修饰,当局部内部类被实例化后,方法弹栈,局部变量随着跟着消失,这个时候局部内部类对象在想去调用该局部变量,就会报错,因为该局部变量已经没了,当局部变量用fanal修饰后,就会将其加入常量池中,即使方法弹栈了,该局部变量还在常量池中呆着,局部内部类也就是够调用。所以局部内部类想要调用局部变量时,需要使用final修饰,不使用,编译度通不过。
  1. 局部内部类不能通过外部类对象直接实例化,而是在方法中实例化出自己来,然后通过内部类对象调用自己类中的方法。看下面例子就知道如何用了。
public class Outer {
    private int id;

    public void out() {
        System.out.println("外部类方法");
    }

    public void method01() {
        class Inner {
            public void in() {
                System.out.println("这是局部内部类");
            }
        }
        //关键在这里,如需要在method01方法中自己创建内部类实例,然后调用内部类中的方法,
        // 等待 外部类调用method01方法,就可以执行到内部类中的方法了。
        Inner In = new Inner();
        In.in();
    }

}

class Test {
    public static void main(String[] args) {
        new Outer().method01();
    }
}

使用局部内部类需要注意的地方就刚才上面说的:

  1. 在局部内部类中,如果要访问局部变量,那么该局部变量要用final修饰
  2. 如何调用局部内部类方法。⇒ 局部内部类只能在自己的方法中用,因为局部内部类相当于一个局部变量,除了方法就找不到了。


以上是关于Java面向对象(OOP)--内部类(局部内部类)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA——面向对象——内部类

面向对象之内部类

Java中,局部内部类

(十七)面向对象之内部类

JAVA07 面向对象(高级)类变量类方法代码块final抽象类接口内部类

JAVA07 面向对象(高级)类变量类方法代码块final抽象类接口内部类