老师请帮我看下我的代码符合要求吗?

老师请帮我看下我的代码符合要求吗?

package com.mason.pc316;
import java.util.Random;
public class Test {
 public static void main(String[] args) {
  // 生成父类对象数组,数组长度为5
  Animal[] animal = new Animal[5];
  // 产生随机数,随机产生三种具体子类的实例
  Random r = new Random();
  int sj;
  for (int i = 0; i < animal.length; i++) {
   sj = r.nextInt(3);
   switch (sj) {
   case 0:
    animal[i] = new Cat("小猫");
    break;
   case 1:
    animal[i] = new Dog("小狗");
    break;
   case 2:
    animal[i] = new Sheep("小羊");
    break;
   default:
    break;
   }
 } 
  // 循环输出,循环体中每个对象分别调用cry()方法。
  for (int i = 0; i < animal.length; i++) {
   animal[i].cry();
  }
 }
}


package com.mason.pc316;
public class Animal {
 // 属性:kind(种类)
 private String kind;
 public Animal() {
 }
 // 创建带参(kind为参数)构造函数
 public Animal(String kind) {
  this.setKind(kind);
 }
 // 应用封装实现对私有属性的get/set操作
 public String getKind() {
  return kind;
 }
 public void setKind(String kind) {
  this.kind = kind;
 }
 // 创建成员方法cry():void
     public void cry() {
      
     }
}

package com.mason.pc316;
public class Cat extends Animal {
 public Cat() {
  
 }
 public Cat(String kind) {
  this.setKind(kind);
 }
 
    //重写父类cry()方法,输出信息为“小猫的叫声:喵喵喵~~~”
 @Override
 public void cry() {
  System.out.println(this.getKind()+"的叫声:喵喵喵~~~");
 }
 
}


package com.mason.pc316;
public class Dog extends Animal {
 public Dog() {
 }
 public Dog(String kind) {
  this.setKind(kind);
 }
 // 重写父类cry()方法:输出信息为“小狗的叫声:汪汪汪~~~”
 @Override
 public void cry() {
  System.out.println(this.getKind() + "的叫声:汪汪汪~~~");
 }
}

package com.mason.pc316;
public class Sheep extends Animal {
 public Sheep() {
 }
 public Sheep(String kind) {
  this.setKind(kind);
 }
 // 重写父类的方法cry(),要求输出信息“小羊的叫声:咩咩咩~~~”
 @Override
 public void cry() {
  System.out.println(this.getKind() + "的叫声:咩咩咩~~~");
 }
}

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

请老师帮我看下,我的代码符合3-16的编程练习要求吗?或者还有什么需要改进的地方?谢谢老师!

正在回答

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

2回答

嗯嗯,没问题。祝:学习愉快

  • MasonM 提问者 #1
    谢谢老师,但我还有点小疑问请老师解答一下。
    2018-08-14 15:52:56
提问者 MasonM 2018-08-14 15:57:59

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

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

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

我经过老师你的解答之后,去尝试了用对象名.方法名的方式去调用final修饰过的方法,可以成功调用呀?这是为什么呢?


  • 通过类名.sss()不是通过类对象.sss(),也就是Animal.sss(),是行不通的。如果它是static则可以。
    2018-08-14 17:39:11
  • 提问者 MasonM 回复 好帮手慕雪 #2
    噢好的谢谢老师,那请问通过类名去调用方法和通过对象名去调用方法有什么区别吗?
    2018-08-14 17:41:01
  • 好帮手慕雪 回复 提问者 MasonM #3
    static是在类加载就存在的方法,此方法属于这个类。所以类就可以直接调用。另一个属于类对象,只有你new出这个对象才能调用。
    2018-08-14 18:01:47
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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