簡體   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