私はJavaを使い慣れておらず、スーパークラスのサブクラスメソッドを呼び出すことが可能かどうかを知りたいと思います。そして継承を行う場合、どこに設定する適切な場所ですpublic static void main。Java継承:スーパークラスのサブクラスメソッドを呼び出す
スーパー
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();
}
}
サブクラス
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);
}
}
いいえ、それはできません。クラスは、サブクラス化されたかどうかを知る方法がありません。ユーザーは必ずしも管理者ではなく、管理者IS-Aユーザーです。ユーザー参照を管理者にキャストしないかぎり、管理者は親メソッドを呼び出すことはできますが、それ以外の方法は呼び出すことはできません。 – duffymo
私は、すべての "機能"クラスの外にmainメソッドを配置する習慣を作りました。あなたの例では、メインメソッドと2つの余分なクラスを保持する 'Functionality'クラスを作成します。ある日プログラムがユーザーとは関係のない機能を提供する場合はどうでしょうか?最も簡単なユースケースは、ヘルプテキストを表示している可能性があります。これは 'User'クラスに収まらないでしょうか? – bleistift2
'user1.getLevel()'を呼び出すには、 'admin1 user1'のように' user1'を宣言するか、 '((Admin)user1).getLevelのように' user1'をキャストする必要があります。 () 'を返します。 –