关于成员,静态,局部内部类中元素,方法的调用范围

1.在外部类中调用成员内部类的方法应该是:
当前对象.成员内部类对象.实例方法();实例属性同理
2.而在成员内部类中调用外部类中的实例方法应该是:
指向外部类对象的引用.实例方法();实例属性同理
例如:

public class OutClass {//外部类
    int a=10;
    public void m(){
        System.out.println("外部类中的方法");
    }

    public static void main(String[] args) {
        System.out.println(new OutClass().new InClass().a);//外部类调用内部类中的属性
        new OutClass().new InClass().m();
    }

    public class InClass{//成员内部类
        int a=20;
        public void m(){
            System.out.println("内部类中的方法");
            System.out.println(new OutClass().a);//内部类调用外部类中的属性
            new OutClass().m();
        }
    }
}

3.对于静态内部类,在外部类中使用 指向外部类对象的引用.实例方法()/属性 去调用成员内部类的实例方法/属性,反之亦然
例如:

public class OutClass2 {
    int a=10;
    public void m(){
        System.out.println("外部类中的实例方法");
    }

    public static void main(String[] args) {
        System.out.println(new innerClass2().a);//外部类调用内部实例属性
        new innerClass2().m(); //外部类调用内部实例方法
    }

    static public class innerClass2{//静态内部类
        int a=20;
        public void m(){
            System.out.println("内部类中的实例方法");
            System.out.println(new OutClass2().a);//内部类调用外部实例属性
            //new OutClass2().m();//内部类调用自己的实例方法(new OutClass2().可省略)注释掉避免死循环
            System.out.println(a);//内部类调用自己实例属性
            //m2();//内部类调用自己的静态方法,注释掉避免死循环
        }

        public static void m2(){
            System.out.println("内部类中的静态方法");
        }
    }
}

4.局部内部类就比较特殊,因为其是出现在方法中的类,所以它的调用有一定约束
因为局部内部类作为局部属性,在其他地方(作用域外)无法使用,导致局部内部类在其他方法中无法创建对象;局部内部类的对象 必须创建在所在方法中,并且在局部内部类自身之后
例如:

public class JuBuClass {
    public static void main(String[] args) {
        int a=10;
        new JuBuClass().m();
        //JuBu jubu = new JuBu();//报错,此处无法创建局部内部类对象
    }

    public void m(){
        int a=20;
        //JuBu jubu = new JuBu();//报错,此处无法创建局部内部类对象
         class JuBu{//局部内部类不能有修饰符
            int a=30;
            public void m(){
                System.out.println("这是局部内部类中的方法m");

            }
        }
        JuBu jubu = new JuBu();new JuBu();//局部内部类的对象 必须创建在所在方法中,并且在局部内部类自身之后
        System.out.println(jubu.a);
        jubu.m();
    }
}

只有在局部内部类所在的方法中,并且局部内部类之后,才可以通过创建局部内部类来调用相关方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值