内部类系列-局部内部类

1》局部内部类

  • 局部内部类是定义在外部类的局部位置,比如方法、代码块中,并且有类名。
  • 可以直接访问外部类的所有成员,包括私有的。
  • 不能添加访问修饰符,因为其地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量也可以使用final
  • 作用域:仅仅在定义它的方法或代码块中
  • 局部内部类本质上仍是一个类
  • 外部其他类不能访问局部内部类(因为其作用域是在定义它的局部内)
  • 作用域外不允许访问内部类
  • 若外部类与局部内部类的成员重名时,遵循就近原则。若想访问外部类的成员,则可以使用(外部类名.this.成员)去访问。
  • (外部类名.this)本质就是外部类的对象
  • this本质就是this所在类的当前类对象
  • 访问方式:
    A、局部内部类访问外部类成员:直接访问
    B、外部类访问局部内部类成员:先创建对象,再访问(注意:必须在作用域内)
public class InnerClassDemo {
    public static void main(String[] args) {
         Outer outer = new Outer();
         outer.method2();
        //Outer_InnerClass inner3 = new Outer_InnerClass();//作用域外不允许访问内部类
        System.out.println("InnerClassDemo[outer]:"+outer);//com.Outer@66d3c617
    }

}
class Outer{
    private int n = 100;
    public int num=2;
    private void method1(){
        System.out.println("我是外部类私有方法");
    }
    public void method2(){
        final class Outer_InnerClass{//在局部位置,可以final修饰
            private int num=35;
            public void inner_mehtod1(){
                //可以直接访问外部类所有成员
                System.out.println("n="+n);//可以访问外部类私有属性
                method1();//可以访问外部类私有方法
                System.out.println("num="+num);//成员重名默认就近原则访问内部类变量
                //Outer.this本质就是外部类的对象即哪个外部类对象调用了局部内部类所在方法method2,Outer.this就是哪个对象
                System.out.println("num="+Outer.this.num);//成员重名(外部类名.this.成员)指定访问外部类成员
                inner_mehtod2();
            }
            public void inner_mehtod2(){
                System.out.println("Outer_InnerClass[this]:"+this);//com.Outer$1Outer_InnerClass@63947c6b
                System.out.println("Outer_InnerClass[Outer.this]:"+Outer.this);//com.Outer@66d3c617
            }
        }
        //外部类访问局部内部类成员:创建对象,再访问
        final Outer_InnerClass inner = new Outer_InnerClass();//作用域仅仅在定义的方法内
        inner.inner_mehtod1();//本质仍是类
        System.out.println("inner:"+inner);//com.Outer$1Outer_InnerClass@63947c6b
        System.out.println("Outer[this]"+this);//com.Outer@66d3c617
    }

    //Outer_InnerClass inner = new Outer_InnerClass();//作用域外不允许访问内部类
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值