Ich bin sehr neu in Java und würde gerne wissen, ob das Aufrufen einer Unterklassenmethode in einer Oberklasse möglich ist. Und wenn Vererbung, wo ist der richtige Ort, um öffentlichen statischen void Haupt setzen.Java-Vererbung: Aufrufen einer Unterklassenmethode in einer Oberklasse
Superklasse
public class User {
private String name;
private int age;
public User() {
//Constructor
}
//Overloaded constructor
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public static void main(String []args) {
User user1 = new Admin("Bill", 18, 2);
System.out.println("Hello "+user1.getName());
user1.getLevel();
}
}
Subclass
public class Admin extends User {
private int permissionLevel;
public Admin() {
//Constructor
}
//Overloading constructor
public Admin(String name, int age, int permissionLevel) {
super(name, age);
this.permissionLevel = permissionLevel;
}
public void getLevel() {
System.out.println("Hello "+permissionLevel);
}
}
Nein, das ist nicht möglich. Eine Klasse hat keine Möglichkeit zu wissen, ob oder wann sie unterklassifiziert wurde. Ein Benutzer ist nicht immer ein Administrator, sondern ein Administrator ist ein Benutzer. Der Administrator kann übergeordnete Methoden aufrufen, jedoch nicht anders herum, es sei denn, Sie haben einen Benutzerverweis auf einen Administrator ausgeführt. – duffymo
Ich habe es mir zur Gewohnheit gemacht, die Hauptmethode außerhalb aller "funktionalen" Klassen zu platzieren. In Ihrem Beispiel würde ich eine Klasse 'Funktionalität' erstellen, die die Hauptmethode und Ihre zwei zusätzlichen Klassen enthält. Was ist, wenn Sie eines Tages Funktionen programmieren, die nichts mit Benutzern zu tun haben? Der einfachste Anwendungsfall könnte darin bestehen, einen Hilfetext anzuzeigen, der nicht in die Klasse "User" passt, oder? – bleistift2
Es sieht so aus, als ob man 'user1.getLevel()' 'entweder' user1' wie 'Admin user1' deklarieren muss oder' user1' wie '' ((Admin) user1) .getLevel umwandeln muss() '. –