如何@Override在类中实现的接口中声明的属性

时间:2018-11-14 11:25:23

标签: java interface override implementation

接口:

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 :(得分:2)

从接口继承到类的

String Bezeichnungi是最终的,因此不能被覆盖。

答案 1 :(得分:0)

正如@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);
 }

}

由于我们不知道您的具体用例,因此,除了告诉您为什么它无法正常工作之外,我们无济于事