Java中的成员内部类

一、什么是成员内部类

成员内部类就是定义在外部类成员位置(属性/方法的位置)的类。成员内部类就是个成员

二、为什么要有成员内部类

使用场景:除了它的外部类,不会被其他类使用,就可以使用成员内部类。有两种情况:1.不可能有其他类使用该内部类。2.该内部类不能被其他类所使用。

三、特点

成员内部类---访问--->外部类:

  • 成员内部类可以直接访问外部类的所有成员,包括私有的。
  • 成员内部类可以添加任意访问修饰符(public, protected, default, private),因为成员内部类的地位就是一个成员。
  • 成员内部类的作用域就是它的外部类整个类体,因为成员内部类就是个成员。

外部类---访问--->成员内部类:

  • 如果外部类的方法想访问成员内部类,要在外部类的方法中先创建成员内部类的对象,再访问。

外部其他类---访问--->成员内部类:(两种方法,看下面代码即可)

package com.hspedu.innerClass;

public class memberInnerClass {
    public static void main(String[] args) {

        //1.第一种方式:用外部类的实例
        Outer08 outer08 = new Outer08();
        //outer08.new Inner08();相当于把new Inner08()当作是outer08成员
        //这就只是个语法,不用纠结
        Outer08.Inner08 inner08 = outer08.new Inner08();
        inner08.say();
        //2.第二种方式:在外部类中,编写一个方法,可以返回Inner08对象。其实和第一种方式一样,第二种有点画蛇添足的感觉
        Outer08.Inner08 inner08Instance = outer08.getInner08Instance();
        inner08Instance.say();

        outer08.t1();
    }
}

class Outer08{  //外部类
    private int n1 = 10;
    public String name = "张三";

    //1.成员内部类是定义在外部类的成员位置上
    //2.成员内部类可以直接访问外部类的所有成员,包括私有的
    //3.成员内部类可以添加任意访问修饰符(public, protected, default, private),
    // 因为成员内部类的地位就是一个成员。
    public class Inner08{  //成员内部类
        public double sal = 99.9;
        public void say(){
            System.out.println("n1= " + n1 + "name= " + name);
        }
    }

    //该方法返回一个Inner08实例
    public Inner08 getInner08Instance(){
        return new Inner08();
    }

    //写方法
    public void t1(){
        //使用成员内部类
        //创建成员内部类的对象,然后使用相关的方法
        Inner08 inner08 = new Inner08();
        inner08.say();
        System.out.println(inner08.sal);
    }
}

如果外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m1m-FG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值