Java中成员内部类的使用

      Java中内部类可分四种为:
      1.成员内部类
      2.方法(局部)内部类
      3.静态内部类
      4.匿名内部类

其中最常见的就是成员内部类,也称为内部类。
接下来我们就通过代码了解什么是成员内部类,和成员内部类的作用。
      新建一个Person类,在Person类中再建一个Heart类,其中Heart就为成员内部类,Person为Heart的外部类。其中Heart可以用任意修饰符修饰(public、protected、private等),不使用修饰符则是默认的访问权限,在此我们不使用修饰符。

package people;
//外部类
public class Person {
    int age;
    //获取内部类的方法
    public Heart getHeart(){
        return new Heart();
    }

    //成员内部类
    class Heart{
        public String beat(){
            return Person.this.age+"心脏再跳动!";
        }
    }
}

接下来我们将这个成员内部类实例化,新建一个测试类,命名为PeopleTest。

package people;
//将内部类实例化
public class PeopleTest {
    public static void main(String[] args) {
        Person lili=new Person();
        lili.age=12;
        //获取内部类对象实例
        //方式1:new 外部类.new 成员内部类
        Person.Heart myHeart=new Person().new Heart();
        System.out.println(myHeart.beat());

        //方式2:外部类对象.new 内部类
        Person.Heart myHeart1=lili.new Heart();
        System.out.println(myHeart1.beat());

        //方式3:外部类对象.获取方法
        Person.Heart myHeart2= lili.getHeart();
        System.out.println(myHeart2.beat());
    }
}

在测试类PeopleTest中通过3种方式对成员内部类Heart进行实例化。但是这3种方式都是需要由外部类信息才能完成实例化。所以我们可以得出结论:成员内部类在外部使用时,无法直接实例化,需要由外部类信息才能完成实例化。
在测试类中我们同时对age进行赋值,现在我们运行一下查看运行结果。

E:\JDK-11\bin\java.exe Dfile.encoding=UTF-8 -classpath D:\IDEA\untitled\out\production\untitled people.PeopleTest
0心脏再跳动!
12心脏再跳动!
12心脏再跳动!

进程已结束,退出代码为 0

通过方式1实例化的内部类输出的age的值为默认值0,原因是我们通过new关键字产生的新实例对象,在这个实例对象产生的过程当中并没有对age这个属性产生赋值的过程,所以在这里age使用默认值0。t通过方式2和方式3产生的实例对象则成功给age赋值。

对于内部类和外部类的成员访问:
内部类可以直接访问外部类成员,如果内部类和外部类出现同名属性,内部类在使用时优先访问内部类中定义的属性
如果使用外部类的同名属性的话可以这样调用

外类名.this.属性名

如果外部类访问内部类的成员,则需要通过内部类的实例才能获取到。

new 内部类名().属性名=属性值;

注:本篇文章仅个人见解,若有错误,欢迎指正!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值