使用super覆盖java中的方法

时间:2015-11-19 08:55:21

标签: java overloading super override

所以,我必须使用数据类型int,float,double和short创建68种不同的求和方法。该类被称为OverloadingSums。这是一个方法的例子。

public double sum(double x, float y, int z)
{
    return x+y+z;
}

现在我被要求创建一个名为ZeroSum的类,基本上复制OverloadingSum并将所有内容返回到零。这是一个例子。

public double sum(double x, float y, int z)
{
    return 0;
}

然后我被要求创建另一个名为RealSum的类,它将扩展ZeroSum类。我对这个任务的措辞有点困惑,不确定stackoverflow社区是否有帮助,但我只是极度困惑。

以下是作业要求:

  

现在我们已经彻底探索过载了   探索压倒一切。创建一个名为ZeroSum.java的类。全部拿走   OverloadingSum.java中的方法并将它们更改为全部返回   ZeroSum.java中的零。接下来,创建一个名为RealSum.java的类。这个   class,RealSum,将扩展ZeroSum类。全部为零   我们的总和并不是很有用。我们需要覆盖父级或   超类方法产生实际结果。创造必要的   覆盖ZeroSum.java中所有这些的方法。当你是   完成针对DrivingSum.java的运行。

这就是我在主要方法中所拥有的:

public class DrivingSum {
public static void main(String[] args) {
    int x = 10;
    int y = 20;
    // x + y = 30....yay?
    ZeroSum zero= new ZeroSum();
    RealSum real= new RealSum();

    System.out.println("Calling ZeroSum " + zero.sum(x,y) );
    System.out.println("Calling ZeroSum " + real.sum(x,y) );

}

}

所以,根据我对此的理解,我编写了以下代码:

public class ZeroSum extends RealSum{
    public double sum(double x, float y, int z)
    {
        return super.sum(x,y,z);
    }

这将从RealSum中获取方法,而不是使用位于ZeroSum类中的sum方法。所以当我运行main方法时,zero.sum(x,y)给我30。

混淆来自于赋值要求我将ZeroSum中的所有内容设置为零。如果我将ZeroSum扩展到RealSum,它并没有真正有所作为。我这样做了吗?或者我只是过分夸大这种方式?

2 个答案:

答案 0 :(得分:1)

这个任务的目标是探索重写概念,其中执行的函数取决于它在运行时调用的对象类型,所以你将有这样的东西:

public class ZeroSum {
    public double sum(double x, float y)
    {
        return 0;
    }
}

public class RealSum  extends ZeroSum{
    public double sum(double x, float y)
    {
        return x+y;
    }
}

public class DrivingSum {
public static void main(String[] args) {
    int x = 10;
    int y = 20;
    // x + y = 30....yay?
    ZeroSum zero= new ZeroSum();
    ZeroSum real= new RealSum();

    System.out.println("Calling ZeroSum " + zero.sum(x,y) ); //here the sum will return zero 
    System.out.println("Calling ZeroSum " + real.sum(x,y) ); //here the sum will return 30 

}

答案 1 :(得分:0)

我相信他试图说明你在父类中所写的任何内容都被转移(这称为继承)给孩子。您可以通过使用与父类相同的名称和参数在子类中编写方法来覆盖它。方法

我也相信你读的作业有点不对,它说:

  

这个类RealSum将扩展ZeroSum类。

我认为这是因为RealSum是ZeroSum的孩子,而不是相反:

public class RealSum extends ZeroSum{
   //code code code
}

这意味着ZeroSum中的所有内容都设置为0,RealSum设置新值,而不是使用super。我不打赌我的手这是正确的但是在休息和新鲜空气后再次尝试阅读作业:)

希望这有帮助!