java - 非抽象类中的抽象方法
问题描述
如果我们有例如:
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();
推荐阅读
- python - 无法使用 Selenium 提交 drupal 菜单添加表单
- docker - Kubernetes 中的 IBM MQ 统一集群
- sql - 找不到解决三张表和连接操作相关问题的方法
- java - curl --cert 使用了错误的证书
- javascript - setTimout() ajax 请求不成功
- cin - 为什么在我写入并关闭该文件后我不能从该文件中读取?
- bazel - Bazel 是否支持枚举传递依赖项和依赖项存储库位置?
- elasticsearch - 如何过滤来自请求正文而不是请求 url 的 elasticsearch 响应?
- c# - 如何使用 c# Litedb (noSQL) 更改数据库位置?
- android - 在 Auth0 Android SDK 上使用通用登录时阻止注册并只允许登录?