Как переопределить атрибут, объявленный в интерфейсе, реализованном в классе - PullRequest
0 голосов
/ 14 ноября 2018

Интерфейс:

package II_1_b;



public interface Bezeichnung {

public String Bezeichnungi = "Hallo";
public abstract void setBezeichnung();
}

класс:

package II_1_b;

public class Speerwurf extends SportDaten implements Bezeichnung {

private double weite;

 @Override
   public void setBezeichnung(){    //Here we want to Override the String in 
     Bezeichnungi = "Test";         //the Interface
}



public Speerwurf(String n, double w, String bez) {
    super(n);
    this.weite = w;
    bez = Bezeichnungi;
}

@Override
public void display() {
    System.out.println("Speerwurf von " + this.SportlerName + ":\n"
            + weite + " Meter " + Bezeichnungi);
 }

}

Вы можете посмотреть наш Код здесь, я прокомментировал проблемную область и надеюсь, что вы нам поможете.Stackoverflow говорит мне добавить больше деталей, поэтому я опишу, что у меня будет на обед: думаю, я сделаю себе пиццу TK-Pizza, может быть, 2. Я часто очень голоден.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Как указано @slaw, поля в интерфейсах не могут быть изменены и поэтому являются статическими и конечными.Кроме того, нет смысла объявлять поля в интерфейсе, потому что он объявляет только определенное поведение, а не состояние.Чтобы все работало так, как показано здесь, вам нужно использовать класс abstract:

package II_1_b;



public abstract class Bezeichnung {

public protected String Bezeichnungi = "Hallo";
public abstract void setBezeichnung();
} 

Класс бетона:

package II_1_b;

public class Speerwurf extends Bezeichnung { //think about how to handle SportDaten!

private double weite;

 @Override
   public void setBezeichnung(){    //Here we want to Override the String in 
     Bezeichnungi = "Test";         //the Interface
}



public Speerwurf(String n, double w, String bez) {
    super(n);
    this.weite = w;
    bez = Bezeichnungi;
}

@Override
public void display() {
    System.out.println("Speerwurf von " + this.SportlerName + ":\n"
            + weite + " Meter " + Bezeichnungi);
 }

}

Поскольку мы не знаем ваш конкретный вариант использования, мыне может помочь вам, кроме как сказать вам, почему это не работает так, как должно

0 голосов
/ 14 ноября 2018

Строка Bezeichnungi, унаследованная от интерфейса в класс, является окончательной и, следовательно, не может быть переопределена .

...