首页 > 解决方案 > 非抽象类中的抽象方法

问题描述

如果我们有例如:

class Person {
  // public void printInfos(){ }
}

class Student extends Person {
     public void printInfos(){
          System.out.println("studentInfos");
     }
}

class Teacher extends Person(){
     public void printInfos(){
          System.out.println("teacherInfos");
     }
}

main:
Person p1 = new Student();
Person p2 = new Teacher();

我想写: p1.printInfos() 和 p2.printInfos() 并打印“studentInfos”和“teacherInfos”,但除了在 Person 类中声明一个空方法之外,我找不到解决方案(因为我们不能声明它是抽象的并覆盖它,否则将无法实例化)。我觉得空方法的声明即使有效也是错误的。

标签: java

解决方案


您应该完全声明Person为接口。从逻辑上讲,Person不应实例化。在这种情况下,定义新类和空体方法是多余的。

如果您坚持使用 gobbledygook 方法,那么除了定义新类之外,没有其他明智的方法可以做到这一点。

interface Person {
   public void printInfos();
}

class Student implements Person {
     @Override
     public void printInfos(){
          System.out.println("studentInfos");
     }
}

class Teacher implements Person {
     @Override
     public void printInfos(){
          System.out.println("teacherInfos");
     }
}

main:
Person p1 = new Student();
Person p2 = new Teacher();

推荐阅读