java - 为什么我们需要抽象方法?
问题描述
我最近一直在研究抽象方法,我不明白为什么我们需要它们?我的意思是,毕竟,我们只是在覆盖它们。你知道它只是一个声明吗?为什么我们需要它们?
另外,我尝试从互联网上理解这一点,到处都有解释,比如想象有一个抽象类人类,然后它的子类被禁用而不是禁用,那么人类类中的抽象函数walking()
将包含不同的主体或代码。现在我要说的是为什么我们不在禁用而不是禁用的子类中创建一个函数而不是覆盖。因此再次回到第一段中的问题。请解释一下。
解决方案
抽象方法最明显的用途之一是让抽象类从其他方法的实现中调用它们。
这是一个例子:
class AbstractToy {
protected abstract String getName();
protected abstract String getSize();
public String getDescription() {
return "This is a really "+getSize()+" "+getName();
}
}
class ToyBear extends AbstractToy {
protected override String getName() { return "bear"; }
protected override String getSize() { return "big"; }
}
class ToyPenguin extends AbstractToy {
protected override String getName() { return "penguin"; }
protected override String getSize() { return "tiny"; }
}
请注意AbstractToy
' 的实现如何getDescription
能够调用getName
and getSize
,即使定义在子类中。这是一个名为Template Method的著名设计模式的实例。
推荐阅读
- r - 在 Ubuntu Bionic Beaver (18.04)、x86_64 中安装 RStudio 时的权限问题
- react-native - 在 setState false 后反应本机模式未关闭
- angular - 离子:无法进行产品构建 appRate ionic4
- jquery - 如何在移动元素时保持对齐
- kotlin - Kotlin 协程:在 Sequence::map 中调用 Deferred::await
- android - 什么触发 LiveData onChanged()?
- php - 在 MacOs Mojave 上找不到 XAMPP 的 httpd-xampp.conf 文件
- amazon-web-services - 我确实有一个来自 aws ec2 实例的 .pem 文件。但是该实例没有附加键名。
- c++ - 将整数或字符转换为相应的枚举
- php - 如何在 Doctrine 中的父实体之间移动子实体?