Почему мой метод не определен для этого типа? - PullRequest
2 голосов
/ 19 февраля 2020

Я не уверен, почему Eclipse выдает мне эту ошибку, я не могу запустить метод exchange для любого из моих желаемых классов:

Метод exchange (Currency, double) не определен для тип Currency

Некоторые из перечисленных методов кода не были полностью реализованы из-за проблем, возникающих при компиляции.

Какую простую ошибку я делаю?

public abstract class Currency {
  String currencyName;
  double totalFunds;

  //Exchange money between planets
  public abstract double toEarthDollars(double amount);

  public abstract double fromEarthDollars(double EarthDollars); 

  public static void main(String[] args) {
    //TEST INPUT CODE
    Currency mars = new Mars(100.00);
    Currency neptune = new Neptune(100.00);
    Currency saturn = new Saturn(100.00);

    System.out.println("----- Exchanges -----");

    mars.exchange(saturn,25.0);
    neptune.exchange(saturn, 10.0);
    saturn.exchange(mars, 122.0);
    saturn.exchange(mars, 121.0);
  }
} 


public interface Exchangeable {
  //rates should be encapsulated and accessed from here
  double EarthDollar = 1;
  double MarsMoney = 1.3;
  double SaturnSilver = 0.87;
  double NeptuneNuggets = 2;

  public void exchange(Exchangeable other, double amount);
}


public class Mars extends Currency implements Exchangeable {
  public Mars(double amount) {
    currencyName = "MarsMoney";
    totalFunds = amount;
  }

  public double toEarthDollars(double amount) {
    return amount * (Exchangeable.EarthDollar/Exchangeable.MarsMoney);
  }

  public double fromEarthDollars(double EarthDollars) {
    return EarthDollars * (Exchangeable.MarsMoney/Exchangeable.EarthDollar);
  }

  public void exchange(Exchangeable other, double amount) { 
    System.out.println("Hello");
    //double transfer = this.toEarthDollars(amount);
    //transfer = ((Mars) other).fromEarthDollars(transfer);
  }
}

Ответы [ 2 ]

3 голосов
/ 19 февраля 2020

Ваш абстрактный класс Currency не реализует интерфейс Exchangeable. Измените

public abstract class Currency {

на

public abstract class Currency implements Exchangeable {
1 голос
/ 19 февраля 2020

Я думаю, что ваш Currency класс не знает метод exchange только Exchangeable имеет его.

Так что вы можете захотеть разыграть:

  Currency mars = new Mars(100.00);
  Exchangeable marsEx = (Exchangeable)mars;
  Exchangeable saturnEx = (Exchangeable)saturn;
  marsEx.exchange(saturnEx,25.0);

Вы также Возможно, вы захотите проверить, может ли это Currency быть приведено к Exchangeable, так как, возможно, не все валюты подлежат обмену.

Также вам может понадобиться разыграть Сатурн, поскольку Currency нельзя передать в метод обмена .

...