2-7代码请提意见

2-7代码请提意见

public class Monkey {
   //成员属性,名字 特征
   public String name;
   public String feature;
   //无参构造方法
   public Monkey(){
       System.out.println("名称:长尾猴");
       System.out.println("特征:尾巴长");
   }
   public Monkey(String name,String feature){
            this.name = name;
             this.feature = feature;
     

   }
}


public class TestMonkey {
   public static void main(String[] args){
       Monkey m = new Monkey();
       System.out.println(m);
       Monkey m1 = new Monkey("白头叶猴","头上有白毛,喜欢吃树叶");

        System.out.println("名称:"+m.name);

       System.out.println("特征:"+m.feature);

   }
}

正在回答

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

2回答

你好!根据题目要求,无参构造方法中是给属性赋值为默认值,比如name="长尾猴"; 而带参构造方法中,是用参数赋值,如:this.name=name;在主方法中用对象获取属性值并输出,如System.out.println("名称:"+m.name);

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

  • 未知数X 提问者 #1
    public Monkey(String name,String feature){ System.out.println("名称"+ name); System.out.println("特征"+feature); 这里我没有填写this.name也是一样的输出了但是写了this.name这样也是一样的 请问是我哪里理解有问题吗? public Monkey(String name,String feature){ this.name = name; this.feature = feature; System.out.println("名称"+name); System.out.println("特征"+feature); }
    2017-09-30 16:29:59
  • 好帮手慕珊 回复 提问者 未知数X #2
    public Monkey(String name,String feature){ System.out.println("名称"+ name); System.out.println("特征"+feature); 这么写,输出来的是传进来的参数值,但是并没有给成员变量赋值,如果你在类的外面定义了对象m,通过m.name去获取name值并输出的话,就不是你传进去的参数,而是成员变量的默认值了。
    2017-09-30 17:13:14
  • 未知数X 提问者 回复 好帮手慕珊 #3
    您说的这个 没有给成员变量赋值 这个我就不是很懂了,但是输出的结果都是一样的,请问具体有什么不同呢?如果给成员变量赋值的好处又是什么呢?
    2017-10-02 22:58:29
喜欢做梦的鱼 2017-10-03 10:50:07

关于你对于构造方法中赋值的理解,其实可以在main方法中,添加几条输出语句进行验证。譬如:

public class TestMonkey {
    public static void main(String[] args) {
        Monkey m = new Monkey();
        System.out.println(m.name);
        System.out.println(m.feature);
        Monkey m1 = new Monkey("白头叶猴", "头上有白毛,喜欢吃树叶");
        System.out.println(m1.name);
        System.out.println(m1.feature);
        
    }
}

此时就可以发现,运行结果http://img1.sycdn.imooc.com/climg//59d2f9ec00014b5f08040580.jpg

之所以会产生这个结果,就是因为之前的输出语句是在构造方法中直接打印的传入方法的参数,但是由于数据并没有传给类中的属性,所以导致类外操作的时候,输出结果为null。

如果想要类外操作的时候也能正常显示,需要修改构造方法,譬如:

public Monkey(String name, String feature) {
        this.name=name;
        this.feature=feature;
    }

祝学习愉快~

  • 提问者 未知数X #1
    public Monkey(String name,String feature){ this.name = name; this.feature = feature; } 这样写就是为了类外操作 我这样理解没有错吧
    2017-10-03 14:13:42
  • 好帮手慕雪 回复 提问者 未知数X #2
    是为了给它的name和feature属性赋值。祝:学习愉快
    2017-10-03 20:41:24
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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