Пытаюсь использовать интерфейс стратегического дизайна, но не могу получить данные в переменную

Я студент, только изучающий интерфейсы. У меня есть абстрактный класс, использующий интерфейс, который вызывается из расширенного класса. Проблема в том, что когда я пытаюсь установить переменную "power", вместо "test" возвращается "Nuclear@3339ed6d". Вы найдете это в расширенном классе внизу. Весь код компилируется и запускается. Буду признателен за любую помощь.

//ИНТЕРФЕЙС:

public interface MoveType  
{
   public void move();  
}

//РЕАЛИЗАЦИЯ:

public class Nuclear implements MoveType
{   
   public String move()
   {
      return ("test");   
   }
}

//РЕЗЮМЕ

public abstract class Ship 
{
   private String name;
   private String year;
   private MoveType power;

   // Constructors
   public Ship(){}

   public Ship(String n, String y)
   {
      name = n;
      year = y;
   }

   // Getters
   public String getName()
   {
      return name;
   }
   public String getYear()
   {
      return year;
   }
   public MoveType getPower()
   {
      return power;
   }
   // Setters
   public void setName(String n)
   {
      name = n;
   }
   public void setYear(String y)
   {
      year = y;
   }
   public void setPower(MoveType p)
   {
      power = p;
   }
}

//РАСШИРЕННЫЙ КЛАСС

public class CargoShip extends Ship
{
   private int tonnage;  //cargo capacity in tonnage

   // Constructors
   public CargoShip(){}

   public CargoShip(String n, String y, int t)
   {
      super(n,y);
      tonnage = t;
      setPower(new Nuclear());
   }

   // Getter
   public int getTonnage()
   {
      return tonnage;
   }
   // Setter
   public void setTonnage(int t)
   {
      tonnage = t;
   }
   // To String Override
   public String toString()
   {
      String str = "Name: " + super.getName() + "\n Cargo Capacity in Tonnage: " + tonnage + "\n Ship is powered by: " + super.getPower();

      return str;
   }

person user3352523    schedule 25.03.2014    source источник
comment
Его метод по умолчанию toString(), который возвращает Nuclear@3339ed6d. Вы нигде в коде не вызывали метод move.   -  person Braj    schedule 25.03.2014


Ответы (1)


Вам нужно либо переопределить метод toString в Nuclear, либо вызвать super.getPower().move(), чтобы вернуть ожидаемую строку.

person Bhesh Gurung    schedule 25.03.2014
comment
БЛАГОДАРНОСТЬ!! Я добавил .move() в конец метода toString, и это сработало! Спасибо Бхеш. И спасибо всем за ответы. Ваша помощь очень ценится. -Джозеф - person user3352523; 25.03.2014