繁体   English   中英

非抽象类中的抽象方法

[英]Abstract method in a non abstract class

例如,如果有:

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中声明一个空方法外,我找不到其他解决方案(因为我们无法声明将其抽象化并覆盖它,否则将无法实例化)。 我认为即使有效,声明空方法也是错误的。

您应该完全将 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();

请告诉我更多关于您对本课程的需求。 是否有充分的理由为什么要创建Person实例? 如果不是这样的话,那显然对我来说是一个抽象类,我想您应该将它抽象化。

您仍然可以选择声明构造函数,这是子类的“默认”方法(为它们提供实现),并使printInfos为抽象方法。

abstract class Person {
    abstract void printInfos();
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM