Java内部类的分类和定义格式

Java内部类的分类和定义格式

1. 成员内部类

修饰符 class 外部类名称{
  	修饰符 class 内部类名称{
      //...
    }
  //...
}
  • 实例化内部类
Outer.Inner obj = new Outer().new Inner();
obj.methodInner();
  • 如果出现了重名现象,格式为:
外部类名称.this.外部类成员变量名
外部类名称.this.成员方法名
注意不是super关键字,成员内部类不是子类
public class Outer {
    int num = 10;

    public class Inner {
        int num = 20;

        public void methodInner() {
            int num = 30;
            System.out.println(num);//30
            System.out.println(this.num);//20
            System.out.println(Outer.this.num);//10
        }
    }
}

2. 局部内部类

修饰符 class 外部类名称{
  	修饰符 返回值类型 外部类方法名(参数列表){}
  			class 局部内部类名称{
    	  //...
   	 }
	}
  //...
}
  • 外部类方法中需要对内部类实例化才可以使用,不能到外面使用,看下面例子
public class Outer {
    int num = 10;

    public void methodInner() {
        class Inner{
            int num = 20;
            public void methodInner(){
                System.out.println(num);
            }
        }
        Inner obj = new Inner();
        obj.methodInner();
    }
}
public class Demo05Main {
    public static void main(String[] args) {
        Outer obj = new Outer();
        obj.methodInner();
    }
}
如果局部内部类想要访问成员方法的局部变量,那么这个局部变量必须是有效final的
  • 从Java 8开始只要局部变量实施不变,那么final关键字可以省略。

原因:

  1. new出来的对象存在堆内存中
  2. 局部变量是跟着方法走的,在栈内存中
  3. 方法运行结束后,方法立即处栈,局部变量就会立即消失
  4. 但是new出来的对象会在堆内存中持续存在,知道垃圾回收消失

类的权限修饰符

public > protected > (default) > private

定义一个类的时候,权限修饰符规则:
  1. **外部类:**public /(default)
  2. **成员内部类:**public > protected > (default) > private
  3. **局部内部类:**什么都不能写,但也不是default
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值