/*
如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类。
例如:身体和心脏的关系。又如:汽车和发动机的关系。
分类:
1. 成员内部类
2. 局部内部类(包含匿名内部类)
成员内部类的定义格式:
修饰符 class 外部类名称 {
修饰符 class 内部类名称 {
// ...
}
// ...
}
注意:内用外,随意访问;外用内,需要内部类对象。
==========================
如何使用成员内部类?有两种方式:
1. 间接方式:在外部类的方法当中,使用内部类;然后main只是调用外部类的方法。
2. 直接方式,公式:
类名称 对象名 = new 类名称();
【外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();】
局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】。
备注:从Java 8+开始,只要局部变量事实不变,那么final关键字可以省略。
原因:
1. new出来的对象在堆内存当中。
2. 局部变量是跟着方法走的,在栈内存当中。
3. 方法运行结束之后,立刻出栈,局部变量就会立刻消失。
4. 但是new出来的对象会在堆当中持续存在,直到垃圾回收消失。
*/
package day10;
public class Body {
int num = 10;
class Heart{
int num = 20;
public void method(){
int num = 30;
System.out.println("成员内部类");
System.out.println(num);//30
System.out.println(this.num);//20
System.out.println(Body.this.num);//10
}
}
public void method2(){
class Heart2{
public void method2(){
System.out.println("局部内部类");
}
}
}
public void method3(){
Heart one = new Heart();
one.method();
}
}
package day10;
public class TesForBody {
public static void main(String[] args) {
Body heart1 = new Body();
heart1.method3();//使用方法调用成员内部类
Body.Heart heart2 = new Body().new Heart();//直接法
heart2.method();
}
}
java—局部内部类
最新推荐文章于 2022-12-14 18:02:10 发布