如果我们有覆盖的概念,为什么我们应该选择抽象类。无论如何,我们必须扩展抽象类来给出抽象方法的定义,我们可以简单地扩展和重写它的抽象方法,那么使它抽象的逻辑是什么呢?
类动物:
public abstract class Animal{
protected abstract void makeNoise();
}
狗:
class Dog extends Animal{
protected void makeNoise(){
print("woof");
}
}
猫:
class Cat extends Animal{
protected void makeNoise(){
print("meow");
}
}
当我想要一些噪音:
private Animal animal; // could be a (cute) dog or a cat or something else.
public void makeNoise(){
this.animal.makeNoise();
}
总之,抽象类给出了定义,正如您所说。定义可能很重要,尤其是当我想在不知道细节的情况下实现特定逻辑时。
抽象方法不能有实现,所以在抽象类中提供实现并不是为了在(具体的)子类中重写它。
抽象方法的目的是定义所有子类都将拥有的公共行为。然而,这种行为在抽象类级别是未知的。举个简单的例子:
abstract public class Animal {
public abstract void eat();
}
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("I eat dog biscuits");
}
}
在这里,所有的动物都吃东西,但我们不知道它们一开始吃什么,直到我们创建了一个特定的子类。抽象的方法非常适合这个问题。
比如说,你将生产很多不同类型的汽车:家用车、跑车、F1赛车。。。
对于所有这些,accelerate()方法将有一个非常不同的实现。假设您不会将Car作为抽象类,并提供accelerate的实现。
如果有人要制造一辆F1赛车,他可能会想:我们已经有了加速的功能,没有理由不使用它。最终,我们可能会以完全相同的方式加速所有类型的汽车。
这将导致非常缓慢的F1比赛,或基本的交通,即使是闪光灯也不想成为行人。
抽象类是告诉“做什么”,而不是“如何做”,但也有可能添加一些非抽象方法,不像接口。
问题内容: 如果我们使用ExecutorCompletionService,则可以将一系列任务作为s 提交,并将结果作为进行交互。 但也有在的,它接受一个任务,我们得到的名单,以检索结果。 据我所知,使用一个或多个都不会有任何好处(除了我们避免使用循环,否则我们将不得不对任务进行操作),并且基本上它们是相同的想法,只是稍有不同。 那么,为什么有两种不同的方式提交一系列任务呢?我在性能上正确吗?有没
适用于类的语法不适用于概念: MSVC对“专门化”一行说:。 为什么概念不能专门化?有理论上的原因吗?
概括来说,从 Saga 内触发异步操作(Side Effect)总是由 yield 一些声明式的 Effect 来完成的 (你也可以直接 yield Promise,但是这会让测试变得困难,就像我们在第一节中看到的一样)。 一个 Saga 所做的实际上是组合那些所有的 Effect,共同实现所需的控制流。 最简单的是只需把 yield 一个接一个地放置,就可对 yield 过的 Effect 进行
问题内容: 我想知道一个仅在Eclipse上使用Maven或Ant的具体示例。 当我在Eclipse中进行开发时,Eclipse会为我做所有事情,而我只需要单击run按钮。而且,Eclipse可以让您将代码导出到Windows的可运行jar或.exe中。 所以我真的不知道为什么我需要Maven或Ant。 而且,如果确实需要, 我应该选择Maven还是Ant? 问题答案: 因为您的同事可能更喜欢Ne
当你学习 Dart 语言的时候,请记住以下事实和概念: 所有可以放在一个变量里面的东西都是对象,而且所有对象都是类的实例。每一个数值、函数和 null 都是对象。所有的对象都继承自 Object 类。 尽管 Dart 是强类型的,但是 Dart 支持类型推断所以类型声明是可选的。在上面的代码中,number 被推断为类型 int。当你想要显式声明没有预期的类型时,使用特殊的 dynamic 类型。
我在这里(有点)了解jdk 5 Reentry antLock的功能 但为什么我们想要一个“再进入者”锁呢?i、 e如果一个线程已经锁定了一个对象,为什么它需要再次获取它?