在java中如何处理super?
我被要求这样做: 设计 并实现一个名为MonetaryCoin的类,该类派生自Coin类 第5章介绍。在货币硬币中存储代表其价值的值 并为货币值添加getter和setter方法 硬币类别如下:在java中如何处理super?,java,inheritance,Java,Inheritance,我被要求这样做: 设计 并实现一个名为MonetaryCoin的类,该类派生自Coin类 第5章介绍。在货币硬币中存储代表其价值的值 并为货币值添加getter和setter方法 硬币类别如下: public class Coin { public final int HEADS = 0; public final int TAILS = 1; private int face; // ---------------
public class Coin
{
public final int HEADS = 0;
public final int TAILS = 1;
private int face;
// ---------------------------------------------
// Sets up the coin by flipping it initially.
// ---------------------------------------------
public Coin ()
{
flip();
}
// -----------------------------------------------
// Flips the coin by randomly choosing a face.
// -----------------------------------------------
public void flip()
{
face = (int) (Math.random() * 2);
}
// ---------------------------------------------------------
// Returns true if the current face of the coin is heads.
// ---------------------------------------------------------
public boolean isHeads()
{
return (face == HEADS);
}
// ----------------------------------------------------
// Returns the current face of the coin as a string.
// ----------------------------------------------------
public String toString()
{
String faceName;
if (face == HEADS)
faceName = "Heads";
else
faceName = "Tails";
return faceName;
}
}
我想到了这个:
public class MonetaryCoinHW extends Coin
{
public MonetaryCoinHW(int face)
{
setFace(face);
}
public int getFace()
{
if (isHeads()) {
return HEADS;
}
return TAILS;
}
public void setFace( int newFace )
{
while (newFace != getFace()) {
flip();
}
}
然而,我不断得到语法错误。。。我没有正确使用“super”吗?我完全糊涂了;我的错误是什么?不,您没有正确使用
super()
public Coin(int face) {
this.face = face;
}
super()
调用超级构造函数-在本例中,它将调用继承的Coin()
。由于Coin(int-face)
的Coin()中不存在构造函数,因此子类无法调用它
有很多方法可以解决这个问题。我相信您需要运行setFace(face)
。这将正确初始化硬币的价值,我认为最适合你的问题。但是,您也可以将Coin(int-face)
构造函数添加到Coin
类中。您还必须为硬币提供一种保存值的方法。不,您没有正确使用super()
public Coin(int face) {
this.face = face;
}
super()
调用超级构造函数-在本例中,它将调用继承的Coin()
。由于Coin(int-face)
的Coin()中不存在构造函数,因此子类无法调用它
有很多方法可以解决这个问题。我相信您需要运行setFace(face)
。这将正确初始化硬币的价值,我认为最适合你的问题。但是,您也可以将Coin(int-face)
构造函数添加到Coin
类中。不过,您还必须为Coin
提供一种保存值的方法。类Coin需要具有以下构造函数才能使子类正常工作
public Coin(int face) {
this.face = face;
}
这将解决问题super(face)。类coin需要具有以下构造函数才能使子类正常工作
public Coin(int face) {
this.face = face;
}
这将解决超级(面部)问题。不,您没有正确呼叫超级。
您需要有一个参数为int的coin构造函数。
i、 e
不,你打得不对。
您需要有一个参数为int的coin构造函数。
i、 e
任一
从类中删除super(face)
行MonetaryCoinHW
。和简单的调用setFace(face)。但是还要注意,face变量是在您的超类中定义的私有变量,因此您无法访问它
默认情况下,它将调用超类的无参数构造函数。
或
定义Coin(int-face)
类中的构造函数Coin
如果您想做一些不同的事情,只需要在Coin类中定义特殊构造函数。或者
从类中删除super(face)
行MonetaryCoinHW
。和简单的调用setFace(face)。但是还要注意,face变量是在您的超类中定义的私有变量,因此您无法访问它
默认情况下,它将调用超类的无参数构造函数。
或
定义Coin(int-face)
类中的构造函数Coin
如果您想做一些不同的事情,您只需要在Coin类中定义特殊构造函数。当您尝试调用它时,您在super类Coin中错过了相应的构造函数。Coin(int face){…}基于您的问题陈述,我不明白您为什么要尝试将Coin中的face变量与MonetaryCoin的值进行耦合:表示硬币是正面还是反面。超类硬币没有任何价值的概念,因为这就是货币币存在的全部原因。因此,MonetaryCoin显然需要一个独立的“价值”属性。请不要编辑您的问题,以免新来者丢失您所询问的内容。显然,在您的原始代码中有类似于super()
的内容,但您现在删除了它。你怎么期望其他人知道你在问什么呢?当你试图调用它时,你在你的超级类硬币中错过了一个相应的构造函数。Coin(int face){…}基于您的问题陈述,我不明白您为什么要尝试将Coin中的face变量与MonetaryCoin的值进行耦合:表示硬币是正面还是反面。超类硬币没有任何价值的概念,因为这就是货币币存在的全部原因。因此,MonetaryCoin显然需要一个独立的“价值”属性。请不要编辑您的问题,以免新来者丢失您所询问的内容。显然,在您的原始代码中有类似于super()
的内容,但您现在删除了它。你怎么能指望别人知道你在问什么?好吧,那我该怎么做呢,因为我完全迷路了,我在过去的一、两年里一直在文学地研究这个问题。所以为了存储一个值,我必须创建一个全新的变量并执行如下操作:公共类MonetaryCoinHW扩展Coin{private int value;公共MonetaryCoinHW(int value){this.value=value;}public int getFace(){return value;}public void setFace(int face){value=face;}对不起,我只是完全不知道该做什么是的,那正是你需要做的。Coin
的实现需要一个变量来保存硬币的价值。然后,你可以在构造器中使用setFace
来初始化硬币的正面。好的,那么我该怎么做呢,因为我完全迷路了,我在过去的一两个小时里一直在研究这个问题。所以为了存储一个值,我必须创建一个全新的v