2013-04-24 68 views
1

有人问我这样做:在java中如何处理超级?

设计 和实施一个名为MonetaryCoin类是从第5章中介绍的硬币类 派生Store中的货币硬币代表它的价值 并添加值获取和设置方法的货币价值。

币类如下:

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(); 
       } 
     } 

不过,我不断收到语法错误......我不是用“超级”是否正确?我完全困惑;我的错误是什么?

+0

当你尝试调用它时,你错过了超类Coin中的相应构造函数。 Coin(int face){...} http://docs.oracle.com/javase/tutorial/java/IandI/super.html – Drogba 2013-04-24 03:58:59

+0

根据你的问题陈述,我不明白你为什么想要结合硬币中的面部变量:表示硬币是正面还是反面,以及MonetaryCoin的值。超类Coin没有任何价值的概念,因为这是MonetaryCoin存在的全部原因。显然,MonetaryCoin需要一个单独的“价值”属性。 – 2013-04-24 04:15:34

+0

请不要编辑你的问题,让新来者失去你所问的内容。显然,在你的原始代码中,你有类似'super()'但你现在删除了它。你如何期待其他人知道你在问什么? – 2013-04-24 05:02:29

回答

4

不,您没有正确使用super()

super()调用superconstructor - 在这种情况下,它会调用继承的Coin()。由于内部没有构造函数Coin(int face),所以您的子类无法调用它。

有办法解决这个问题。我相信你需要运行setFace(face)。这将正确初始化硬币的价值,我认为最适合您的问题。但是,您也可以将Coin(int face)构造函数添加到​​类。不过,您也必须给​​一种持有价值的方法。

+0

好的,那么我该如何去做这件事,因为我完全失去了,而且我一直在看文学上的过去的hr或2这个相同的问题。所以为了存储一个值,我将不得不创建一个全新的变量,并且做这样的事情: public class MonetaryCoinHW extends Coin { \t private int value; (int value) \t \t \t this.value = value; \t} \t公众诠释getFace() \t { \t \t返回值; \t} \t \t 公共无效setFace(INT面) \t { \t \t值=面部; \t} } – 2013-04-24 04:05:24

+0

即时对不起,我只是完全困惑在做什么 – 2013-04-24 04:06:20

+0

是的,这正是你需要做的。 “硬币”的实施需要一个变量来保存硬币的价值。然后,您可以在构造函数中使用'setFace'来初始化硬币的面部。 – Zyerah 2013-04-24 04:06:40

0

类硬币需要具有以下构造函数才能使您的子类正常工作。

public Coin(int face) { 
    this.face = face; 
} 

这会解决super(face)的问题。

0

不,你没有正确地呼叫超级。 你需要有一个int参数的构造函数。 即

public Coin (int face) 
{ 
     this.face = face; 
} 
0

要么

删除从你MonetaryCoinHWsuper(face)线。并简单拨打电话setface(face)。但是还要注意,面部变量在你的超类中是私人定义的,所以你不能访问它。

默认情况下,它会调用超类的no参数构造函数。

OR

定义​​类

你只需要,如果你想要做一些不同的定义在硬币类的特殊的构造Coin(int face)构造。

+0

我不能混淆超类,因为这个类是由教授提供的,我被告知要创建从它派生的子类 – 2013-04-24 04:13:24

+0

你的子类想要做什么? face变量在超类中是私有的,所以你不能改变它。你想达到什么? – 2013-04-24 04:15:52

+0

嗯,我首先必须: 设计和实现一个叫做MonetaryCoin的类,它是从第5章中介绍的Coin类中派生出来的。将一个值存储在表示其值的货币硬币中,并为货币值添加getter和setter方法。 然后我需要: 创建一个主驱动程序类来实例化25个货币硬币与随机 货币值。司机翻转所有的硬币,计算并打印到 屏幕尾巴面对 所有硬币的平均货币价值,但我不知道如果我做的第一部分正确但 – 2013-04-24 04:19:45