怎么会输出12岁呢?

怎么会输出12岁呢?

package com.imooc.people;

//外部类
public class Person {
    int age;
    
    public Object getHeart() {
    	 class Heart{
            public int age=13;
            int temp=22;
            public void say() {
            	System.out.println("hello");
            }
        	public String beat() {
        		new Person().eat();
            	return new Person().age+"岁的心脏在跳动";
        	}
        }
    	 return new Heart().beat();
//    	new Heart().temp=12;
////    	temp=33;
//    	return new Heart();
    }

我输出的结果是0岁,老师演示的结果是12,我是按照老师的代码写的,哪里有问题呢??

package com.imooc.people;

public class PersonTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Person lili=new Person();
        lili.age=12;
        
        System.out.println(lili.getHeart());
	}

}


正在回答 回答被采纳积分+1

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

1回答
好帮手慕阿慧 2020-03-23 13:49:45

同学你好,

1、Person类中age属性应该是静态的。

2、beat()方法中age是通过类名.属性的方法获得的。

修改代码如下:

http://img1.sycdn.imooc.com//climg/5e784df60926491805100378.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕嘟嘟 #1
    return new Person().age+"岁的心脏在跳动";我这种写法是访问外部类中非静态属性的写法吧? 导致我年龄为0的原因是不是12岁这个值传给的是内部类中的age,所以我调用的是外部类的age才是0的?
    2020-03-23 23:30:08
  • 好帮手慕阿慧 回复 提问者 慕嘟嘟 #2
    同学你好, 1、写法正确。 2、静态属性在没有创建对象之前就已经存在,静态属性在某个类中的所有对象中是共享的,即所有Person类的对象共享age属性。所以main方法中lili.age = 12;改变了共享的age的值,Person类的其他对象取到的age的值就是12了。
    2020-03-24 10:45:11
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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