Ich habe drei Klassen mit dem Namen Human.java, Superhero.java und Run.java. Der Superheld erweitert Human und die Methode Einführung() wird in Superhero mit Aufruf der übergeordneten Klasse Einführung() übersteuert. Aber wenn ich ein Superhelden-Objekt mache und die Methode introduce aufruft, wird der zurückgegebene Wert der Basisklassenmethode nicht ausgegeben. Was ist los mit dir? Danke im Voraus.Warum ruft meine abgeleitete Klassenmethode die Methode override nicht von der Basisklasse auf, obwohl das Schlüsselwort super verwendet wird?
Human.java
public class Human implements Comparable<Human> {
private int age;
private String name;
public Human(String givenName, int age) {
this.name = givenName;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String introduce() {
return "Hey! I'm " + name + " and I'm " + age + " years old.";
}
@Override
public int compareTo(Human H1) {
if(this.getAge() > H1.getAge())
return 1;
else if (this.getAge() < H1.getAge())
return -1;
else
return 0;
}
}
Superhero.java
public class Superhero extends Human {
private String alterEgo;
private int age;
private String name;
public Superhero(String givenName, int age, String alterEgo) {
super(givenName, age);
this.alterEgo = alterEgo;
}
public String getAlterEgo() {
return alterEgo;
}
@Override
public String introduce(){
super.introduce();
return "I am also known as " + alterEgo + "!";
}
}
Run.java
public class Run {
public static void main(String[] args) {
Superhero superhero = new Superhero("Bruce", 26, "Batman");
System.out.println(superhero.introduce());
}
}
Abgesehen von dem beschriebenen Problem müssen Sie in abgeleiteten Klassenfeldern der Oberklasse ('age',' name') nicht neu definieren. Diese Felder werden als von denen im Superklassencode abweichend betrachtet, was zu großer Verwirrung führen kann. – Pshemo