2015-03-26 3 views
0

В дочернем классе GreenSlime Мне предоставлен конструктор с тремя параметрами (я не могу добавить никаких других переменных экземпляра). Но код продолжает давать ошибку об этой строке: super(loc,map,log);, что я понимаю, что конструктор должен иметь одинаковое количество параметров. Но мои спецификации говорят, что через родительский конструктор задает все поля. fullcharge всегда должно быть 4, а начальное значение для charge - 0. Я знаю, что я передаю только 3 параметра вместо 5, но это инструкции моего проекта так говорят. Что я делаю неправильно, и какой лучший подход/решение?Конструкторский вызов дает ошибку-наследование

import java.io.PrintStream; 
public class GreenSlime extends Threat { 

    public GreenSlime(Coord loc, Map map, PrintStream log) 
    { 
     super(loc,map,log); 
     super.fullCharge = 4; 
     super.charge = 0; 
    } 

} 
import java.io.PrintStream; 



public abstract class Threat extends Thing { 

    protected int charge; 
    protected final int fullCharge; 

    public Threat(Coord c, String repr, int fullCharge, Map map, PrintStream log) 
    { 
     super(c,repr,map,log); 
     this.fullCharge = fullCharge; 
     charge = 0; 
    } 

    public abstract void spawn(Coord c); 

    @Override 
    public void doAction() 
    { 

     while(charge != fullCharge) 
     { 
      System.out.println("\"+repr()"+"@"+"getLoc()\" speading"); 

      if(this.canPassThrough()) 
      { 
       spawn(getPrevLoc().step(Direction.N)); 
       spawn(getPrevLoc().step(Direction.S)); 
       spawn(getPrevLoc().step(Direction.E)); 
       spawn(getPrevLoc().step(Direction.W)); 
      } 
      charge++; 
     } 
    } 

} 
+0

Вы можете установить только окончательное поле только один раз. – immibis

+0

Кроме того, конструктор Threat принимает 5 аргументов, и вы пытаетесь только передать его. – immibis

ответ

0

В коде, конструктор Threat имеет подпись, которая принимает 5 аргументов, но где, как вы пытаетесь передать только 3 аргументы к нему.

+0

Я понимаю это. Мои спецификации ограничены такими конструкторами. – joshua

+0

@joshua Затем вам нужно использовать varargs, который принимает любое количество аргументов. !! Вы можете узнать о varargs по адресу http://www.j2eekart.com/2014/12/varargs-in-java.html –

1
public GreenSlime(Coord loc, Map map, PrintStream log) 
{ 
    super(loc,"",4,map,log); 
} 

Я предоставил пустую строку "" для представления, но вам может понадобиться нуль или какое-либо другое значение.

+0

Добро пожаловать. – Sammy

Смежные вопросы