【问题标题】:returning a value within a abstract method在抽象方法中返回值
【发布时间】:2014-04-14 09:33:31
【问题描述】:

我有一个名为温度的抽象类

 public abstract class Temperature
 {     

private float value;
public Temperature(float v)
{
    value = v;
}

public final float getValue()
{
    return value;
}

public abstract Temperature toCelsius();
public abstract Temperature toFahrenheit();
}

然后我有一个从温度延伸的摄氏度和华氏度等级,但为了空间,我会显示摄氏度

  public class Celsius extends Temperature
   { 

      public Celsius(float t)
  {
    super(t);
  }


  public String toString()
  {
    // TODO: Complete this method
    return "";
  }


  @Override
  public Temperature toCelsius() {
    // TODO Auto-generated method stub
    return null;
  }


  @Override
  public Temperature toFahrenheit() {
    // TODO Auto-generated method stub
    return null;
  }
      }

所以我的主程序如下创建一个新的 celcius 对象

      Temperature inputTemp = null , outputTemp = null;
      inputTemp = new Celsius(temp_val);

然后将 outputTemp 分配给调用 toFahrenheit 方法的 inputemp

      outputTemp = inputTemp.toFahrenheit();

然后将得到的答案放入 toString 方法中

      outputTemp.toString

据我所知,Celcius 构造函数使用Temperature 构造函数来存储temp_val 的传入参数。但是,让我感到困惑的是,我如何使用inputTemp.toFahrenheit 方法将Celcius 的转换值返回到Fahrenheit? 我尝试返回this.getValue() * 9 / 5 + 32,但eclipse抱怨说,由于getValue()float方法,我要么必须将Overriding方法更改为float,要么将getValue()更改为Temperature,但两者都不起作用....

【问题讨论】:

  • 你不能把这个返回类型加倍吗?public abstract Temperature toCelsius();公共抽象温度 toFahrenheit();
  • 目前您并没有真正实现这些方法。他们只是返回null
  • @SanjayRajjadi 不,您不能更改抽象方法

标签: java abstract-class


【解决方案1】:

Celsius 中,toCelsuis 应该返回this,因为Temperature 已经在摄氏度。 toFahrenheit 方法应该返回一个新的 Fahrenheit 实例:

@Override
public Temperature toCelsius() {
    return this;
}

@Override
public Temperature toFahrenheit() {
    return new Fahrenheit(this.getValue() * 9D / 5D + 32D);
}

对于Fahrenheit 类,反之亦然。

【讨论】:

  • 谢谢! toString 方法怎么样?我会放 super.toString 吗?
【解决方案2】:

toFahrenheit 返回对Temperature 的引用。

您只有两个与该返回值匹配的具体类:CelsiusFahrenheit,因此您应该返回其中一个类的新对象。大概Fahrenheit 似乎是你方法的目标,所以对于Celsius 类,你应该有类似的东西:

@Override
  public Temperature toFahrenheit() {
    return new Fahrenheit( this.getValue() * 9.0 /5.0 +32.0 );
  }

而且,由于您的班级已经以摄氏度表示温度:

@Override
 public Temperature toCelsius() {
   return this;
 }

【讨论】:

    【解决方案3】:

    toFahrenheit()中你需要像这样返回当前温度类型的对象,

    @Override
    public Temperature toFahrenheit() {
      // TODO Auto-generated method stub
      return this;
    

    }

    你可以像这样得到转换后的结果,

    Temperature inputTemp = null , outputTemp = null;
    inputTemp = new Celsius(temp_val);
    
    outputTemp = inputTemp.toFahrenheit();
    
    float result=outputTemp.getValue();
    

    【讨论】:

      【解决方案4】:

      为什么不更改 toCelsiustoFahrenheit 方法以返回浮点数而不是温度?

      @Override
      public Float toFahrenheit() {
        // TODO Auto-generated method stub
        return (getValue() * 9.0 /5.0 +32.0 );
      }
      

      另外,在基类中声明 toFahrenheittoCelcius 方法真的有意义吗?你不是宁愿只在 Celcius 类中声明 toFahrenheit 而在 Fahrenheit 类中声明 toCelcius 吗?

      【讨论】:

        猜你喜欢
        • 2010-12-13
        • 2016-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-15
        • 2012-09-21
        • 2014-08-25
        相关资源
        最近更新 更多