【发布时间】:2017-06-17 12:33:11
【问题描述】:
我是 java 新手,想知道在超类中调用子类方法是否可行。如果进行继承,那么设置 public static void main 的合适位置在哪里。
超类
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 用户。管理员可以调用父方法,但不能反过来,除非您将用户引用转换为管理员。
-
我养成了将 main 方法放在所有“功能”类之外的习惯。在您的示例中,我将创建一个类
Functionality,它包含 main 方法和您的两个额外类。如果您的程序有一天可能会提供与用户无关的功能怎么办。最简单的用例可能是显示帮助文本——这不适合User类,不是吗? -
乍一看,似乎为了调用
user1.getLevel(),您需要像Admin user1一样声明user1,或者像((Admin) user1).getLevel()一样转换user1。
标签: java inheritance