内部类系列-成员内部类

  • 1、成员内部类定义在外部类成员位置,并且没有static修饰。
  • 2、成员内部类可以直接访问外部类的所有成员,包括私有的。
  • 3、可以添加任意访问修饰符(public,protected,默认,private),因为其地位就是一个成员。
  • 4、作用域:同外部类的其他成员为整个类体。
  • 5、成员内部类----访问----外部类(访问方式:直接访问)
  • 6、外部类----访问-----内部类(访问方式:创建对象,再访问)
  • 7、外部其他类----访问----成员内部类,方式1:作为外部类成员直接访问,但其本质又是一个类故需要关键字new创建;
  • 8、外部其他类----访问----成员内部类,方式2:作为外部类方法值返回(即在外部类中编写一个专门用于对外提供访问的方法)
  • 外部其他类----访问----成员内部类,不管哪种访问方式前提必须是成员内部类提供了对外访问权限
  • 10、若外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问
public class MemberInnerClass {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.outer_method1();

        //外部其他类---访问---成员内部类(前提:成员内部类提供了对外访问权限)
        // 方式1:作为外部类成员直接访问,但其本质又是一个类故需要关键字new创建
        Outer.MemberInner2 memberInner2 = new Outer().new MemberInner2();
        memberInner2.inner_method2();
        //方式2:作为外部类方法值返回(即在外部类中编写一个专门用于对外提供访问的方法)
        //Outer.MemberInner1 memberInner1 = new Outer().getMemberInner1();//私有成员内部类,无访问权限
        Outer.MemberInner2 memberInner21 = new Outer().getMemberInner2();
    }
}

class Outer{
    private int outer_i=10;
    public int outer_j=20;
    public void outer_method1(){
        //外部类---访问---内部类(创建对象,再访问)
         MemberInner1 memberInner1 = new MemberInner1();
         memberInner1.inner_method1();
    }
    private void outer_method2(){
        System.out.println("外部类私有方法");
    }
    //定义在外部类的成员位置,并没有static修饰
    private class MemberInner1{//可以添加任意访问修饰符(public|protected|默认|private)
        public void inner_method1() {
            //直接访问外部类所有属性,包括私有
            System.out.println("outer_i"+outer_i+";outer_j="+outer_j);
        }
    }

    public class MemberInner2{
        public void inner_method2() {
            outer_method2();
        }
    }

    public MemberInner1 getMemberInner1(){
        return new MemberInner1();
    }

    public MemberInner2 getMemberInner2(){
        return new MemberInner2();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值