[英]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.