例如,如果有:
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中声明一个空方法外,我找不到其他解决方案(因为我们可以请勿将其声明为抽象并覆盖它,否则将无法实例化。 我觉得即使有效,声明一个空方法也是错误的。
答案 0 :(得分:2)
您应该完全声明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();
答案 1 :(得分:0)
请告诉我更多关于您对这堂课的需求。是否有充分的理由为什么要创建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");
}
}