使用超类

时间:2018-09-05 03:25:29

标签: java

我们知道基类何时被称为继承的派生类继承,以及派生类何时包含相同的方法名称,返回类型和参数列表,就像基类的方法重写一样。 而且我们也知道super关键字可用于调用基类方法。如果派生类包含与基类相同的方法,则应使用它。换句话说,如果方法被覆盖,则使用它。

但是我的代码无法正常运行,为什么????请帮助我..........

 public class person {
  String name = "Mohan";
  int age = 24;

  void displayInformation() {
   displayInformation();
   System.out.println("Name: " + name);
   System.out.println("Age: " + age);
  }
 }

 public class teacher extends person {

  String qualification = "B.Sc in CSE";


  @Override
  void displayInformation() {
   super.displayInformation();
   System.out.println("Name: " + name);
   System.out.println("Age: " + age);
   System.out.println("Qualification: " + qualification);
  }
 }
 public class MethodOverriding {
  public static void main(String[] args) {

   teacher t = new teacher();
   t.displayInformation();

  }
 }

3 个答案:

答案 0 :(得分:2)

您的理解是正确的。在person的代码中有一个错误:

void displayInformation() {
  displayInformation();

您指导方法displayInformation首先调用方法displayInformation,后者首先调用方法displayInformation,首先调用方法displayInformation(...)。

您将最终陷入异常。

在类displayInformation中删除person的调用,该异常将消失。

答案 1 :(得分:0)

我猜想不是这个:

@Override
void displayInformation() {
  super.displayInformation();
  System.out.println("Name: " + name);
  System.out.println("Age: " + age);
  System.out.println("Qualification: " + qualification);
}

您想要的:

@Override
void displayInformation() {
  super.displayInformation();
  System.out.println("Qualification: " + qualification);
}

否则,姓名和年龄打印两次。一次调用父类方法,然后再次在子类实现中。

答案 2 :(得分:0)

public class person {
String name = "Mohan";
int age = 24`enter code here`;

void displayInformation()
{
    //displayInformation();
    System.out.println("Name: " +name);
    System.out.println("Age: " +age);
}
}

public class teacher extends person{

String qualification = "CSE";
@Override
void displayInformation()
{
    super.displayInformation();
    System.out.println("Name: " +name);
    System.out.println("Age: " +age);
    System.out.println("Qualification: " +qualification);
}
}

public class teacher extends person{

String qualification = "CSE";
@Override
void displayInformation()
{
    super.displayInformation();
    System.out.println("Name: " +name);
    System.out.println("Age: " +age);
    System.out.println("Qualification: " +qualification);
}
}

public class MethodOverriding {
    public static void main(String[] args) {

    teacher t = new teacher();
    t.displayInformation();

}
}