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("这是局部内部类");
}
}
}
}
局部内部类一般的作用跟在成员内部类中总结的差不多,但是有两个要注意的地方:
- 在局部内部类中,如果要访问局部变量,那么该局部变量要用final修饰
为什么需要使用final?
- final修饰变量:变为常量,会在常量池中放着,逆向思维想这个问题,如果不实用final修饰,当局部内部类被实例化后,方法弹栈,局部变量随着跟着消失,这个时候局部内部类对象在想去调用该局部变量,就会报错,因为该局部变量已经没了,当局部变量用fanal修饰后,就会将其加入常量池中,即使方法弹栈了,该局部变量还在常量池中呆着,局部内部类也就是够调用。所以局部内部类想要调用局部变量时,需要使用final修饰,不使用,编译度通不过。
- 局部内部类不能通过外部类对象直接实例化,而是在方法中实例化出自己来,然后通过内部类对象调用自己类中的方法。看下面例子就知道如何用了。
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();
}
}
使用局部内部类需要注意的地方就刚才上面说的:
- 在局部内部类中,如果要访问局部变量,那么该局部变量要用final修饰
- 如何调用局部内部类方法。⇒ 局部内部类只能在自己的方法中用,因为局部内部类相当于一个局部变量,除了方法就找不到了。
以上是关于Java面向对象(OOP)--内部类(局部内部类)的主要内容,如果未能解决你的问题,请参考以下文章