定义格式:
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法名称(参数列表){
class 局部内部类名称{
//……
}
}
}
创建:
调用:
小结类的权限修饰符:
public > protected > (default) > pprivate
定义一个类的时候,权限修饰符的规则:
1.外部类:public / (default)
2.成员内部类:public / protected / (default)/ private
3.局部内部类:什么都不写
局部内部类:如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】
备注:从Java 8+开始,只要局部变量事实不变,那么final关键字可以省略
原因new出来的对象在堆内存当中
2.局部变量是跟着方法走的,在栈内存当中
3.方法运行结束之后,立刻出栈,局部变量就会立刻消失
4.但是new出来的对象会在堆当中持续存在,直到垃圾回收消失
语法
定义在方法的里面 - 局部
package Test14_Demo.Demo08;/*
@create 2020--12--02--15:12
*/
public class NestedClass {
//定义成员变量
private String name = "AAA";
//外部类的方法
public void outerMethod() {
//定义一个局部内部类
class InnerClass {
//声明一个局部内部类的方法
public void innerMethod() {
System.out.println("局部内部类中的方法被调用了");
System.out.println("外部类中的成员变量name的值为:"+ name);
}
}
//定义好局部内部类之后可以使用类 - 必须使用
InnerClass inner = new InnerClass();
inner.innerMethod();
}
//生成get/set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
局部内部类的访问格式:
1.创建外部类
2.通过外部类的对象调用方法来操作局部内部类
package Test14_Demo.Demo08;/*
@create 2020--12--02--15:09
*/
public class NestedClassDemo {
public static void main(String[] args) {
//创建外部类的对象
NestedClass nc = new NestedClass();
//通过外部类的对象调用方法来操作局部内部类
nc.outerMethod();
}
}