【问题标题】:Suggestion for applying Inheritence申请继承的建议
【发布时间】:2014-03-18 20:38:33
【问题描述】:

我正在上一堂课,该课应该使用歌曲 Old MacDonald 来演示继承;有一个动物接口,一个实现每个动物对象的农场类..你明白了。我有两个问题。

1) 动物有类型和声音,例如小鸡是

class Chick implements Animal {
    private String myType;
    private String mySound;
    private String mySound2;
    int flag =0;

    public Chick(String type, String sound)
    {
        myType = type;
        mySound = sound;
    }

    public Chick(String type, String sound,String sound2)
    {
        myType = type;
        mySound = sound;
        mySound2=sound2;
    } 

    public Chick()
    {
        myType = "unknown";
        mySound = "unknown";
    }

    public String getSound() 
    {
        return mySound;
    }

    public String getType()
    {
        return myType; 
    }
}

我应该创建第二个构造函数,它带有一个标志,说明小鸡是幼稚的并返回声音“cheep”还是成人并返回“cluck”,这样 getSound() 返回的概率相同。我不知道该怎么做。我考虑在构造函数中添加一个布尔值,但这不起作用,因为农场类只能创建一个 new Chick();我知道你不只是要给我一个答案,但我什至不知道从哪里开始。

2) 另一个问题是我应该创建一个 NamedCow 类,正如您可能猜到的那样,它给奶牛一个名字。

我不能只在牛类中添加一个 getName 方法,namedCow 必须是一个新类

public class NamedCow extends Cow {

    private String myName;

    NamedCow(String name)
    {
        myName = name;
    }

    public String getName()
    {
        return myName;
    }

您能帮我按需要为 Chick and Cow 类编写正确的代码吗?我必须在这两个课程中做出哪些改变?

【问题讨论】:

  • 提示: 类可以有多个构造函数。
  • 难道不是CowAnimal,所以一切最终都继承自Animal?抽象的呢?我会让一切都来自动物。如果您不想为 Animal 命名,请不要覆盖 getName。例如,在超类中,将其设为空白。
  • NamedCow 有什么问题?除了您的构造函数没有设置typesound 之外,它看起来还不错
  • @ElliottFrisch 我以为官方名称是setters and getters
  • @user3114849 正如 Robert Harvey 所说,类可以有多个构造函数。因此,无论小鸡是否年轻,使用(如您所说!)布尔参数创建另一个构造函数。根据该值,您将初始化声音值。

标签: java


【解决方案1】:

对于小鸡问题,我会使用随机方法,例如: http://docs.oracle.com/javase/7/docs/api/java/util/Random.html

使用 nextBoolean() 并将其结果传递给 getSound(boolean isChild) 方法

然后你签入 getSound() 方法

if (isChild)
   return "cheep";
else 
   return "cluck";

如果您希望每次都得到小鸡的随机响应。只需将随机生成器添加到方法中

String getSound(){

Random r = new Random();

if (r.nextBoolean)
       return "cheep";
    else 
       return "cluck";
}

关于牛的问题,我会创建一个继承animal的牛类,然后编写一个方法: 比如这样的:

nameCow(String name){
    this.cowName=name;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-03
    • 2021-10-30
    • 2018-05-31
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多