Java 如何正确调用抽象类中的方法

Java 如何正确调用抽象类中的方法,java,class,methods,abstract-class,Java,Class,Methods,Abstract Class,如果在下面所有3个类中调用getInfo()和displayInfo()方法,我需要帮助。我试过: public abstract class Human{ public String name; public int number public void getInfo(){ Name = JOptionPane.showInputDialog("Please enter your name: "); money =

如果在下面所有3个类中调用getInfo()和displayInfo()方法,我需要帮助。我试过:

public abstract class Human{
    public String name;
    public int number

    public void getInfo(){
        Name = JOptionPane.showInputDialog("Please enter your name: ");
        money = Double.parseDouble(JOptionPane.showInputDialog("Please enter amount of money .00: "));
    }

    public void displayInfo(){
        JOptionPane.showMessageDialog(null,"Name: "+name+"\n"+
                                           "Number: "+number);
    }
}

public class Student extends Human {

}

public class Teacher extends Human{

}

public class Janitor extends Human{

{
它可以工作,但是它会生成一个警告,说“构造函数中的调用有问题”,我想这不是最好的方法

我还尝试:

public class Student extends Human{
    public Student(){
          getInfo();
          displayInfo();
    }

但如果我让它空着,什么也不会发生。基本上,我试图以一种简单的方式在抽象类中调用该方法,而不需要在每个类中都键入它。

您会收到警告,因为在构造函数中不调用
可重写的
是一种良好做法;由于这些可重写的
可以尝试访问尚未初始化的成员变量
(==null)

,因此不应该在构造函数中调用可重写的函数。选中此项

如前所述,您不应该在构造函数中调用可重写的方法,因为如果另一个类重写此方法并调用超类的构造函数,它可能会尝试使用尚未初始化的值,因为将调用被重写的方法。例如:

@Override
public void getInfo() {
    
}
这将打印
id
的单位化值,因为您首先调用调用子类的
foo
方法的超类的构造函数


如果适合您的情况,您可以通过将方法设置为final来解决此问题。

错误与抽象类中的方法无关,尽管使用
this.methodName
更好,但是在
this.id=id之后,构造函数或调用
super()
中还有另一个问题这将无法编译。调用
super()
必须是subclass.hmm的构造函数中的第一条语句,然后我需要再次检查它,哪个java版本?它在所有java版本中都是这样工作的。检查。谢谢,“final”帮我完成了它,这样我就不用把所有的方法重新输入到其他3个类中了。如果我尝试在每个类中对它们进行初始化,那么将无法达到提高效率的目的,因为每个类中都需要相同的代码。
public class Superclass {
  protected int id;
  protected void foo() {
    System.out.println("Foo in superclass");
  }

  public Superclass() {
    foo();
  }
}

public class Subclass extends Superclass {
  public Subclass(int id) {
    super();
    this.id = id;
  }

  @Override
  protected void foo() {
    System.out.println("Id is " + id);
  }
}