发现getHeart()方法对静态内部类依旧适用

发现getHeart()方法对静态内部类依旧适用

问题描述:

静态内部类可以不借助外部类对象,直接创建。但是发现即使是创建了外部类对象,也能使用get方法获取静态内部类,请问老师是为什么呢?但是使用 外部类对象.内部类() 就是错误的,请问老师这又是为什么呢,静态属性不是所有对象共享的吗?


相关代码:

// 不借助外部类对象创建静态内部类
Person.Heart heart = new Person.Heart();

// 使用外部类对象的get方法获取静态内部类
Person alice = new Person();
heart = alice.getHeart();

// alice.Heart(); 这样就不行


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,1、getHeart()可以获取到内部类是因在getHeart()方法中返回内部类,所以可以通过想调用方法的方式去获取静态内部类。如果同学代码不是这样的结构,建议同学反馈一下代码便于老师定位问题。

https://img1.sycdn.imooc.com//climg/64b5f0aa09b96f9c07790793.jpg

https://img1.sycdn.imooc.com//climg/64b5f0c80963305d08160314.jpg

2、alice.Heart()调用的是方法,而内部类是无法像方法一样调用的,需要进行实例化(new Person.Heart())。所以alice.Heart(); 这样就不行。

祝学习愉快!

  • Macrohard 提问者 #1

    老师您好,我的代码只有getHeart方法的返回值和您不同,我直接返回的Heart类对象而非Object类。

    public Heart getHeart() {
        return new Heart();
    }

    在Person类中设置这个方法,限不限定static都没问题,可以正常返回Heart类对象,也是共享的,后续定义多个Person类对象对静态属性年龄修改,Heart类中beat方法也都能同时改变

    2023-07-18 16:25:06
  • Macrohard 提问者 #2

    我好像懂了,静态内部类也是一个静态成员,所以直接返回应该没有什么问题,只是返回的是一个类对象而已。

    2023-07-18 16:30:18
  • 好帮手慕小尤 回复 提问者 Macrohard #3

    同学你好,静态内部类是一个静态成员,可以直接返回。静态内部类与普通内部类不同之处在于,静态内部类可以独立存在,不依赖于外部类的实例。因此,可以直接返回静态内部类的实例对象,就像返回普通的类对象一样。

    祝学习愉快!

    2023-07-18 16:52:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java工程师 2024版
  • 参与学习       2024    人
  • 提交作业       1318    份
  • 解答问题       1228    个

2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师