如果我们有最重要的概念,为什么要抽象?

时间:2015-04-15 07:14:45

标签: java abstract-class

如果我们有覆盖的概念,为什么我们应该去抽象类。无论如何我们必须扩展抽象类来给出抽象方法的定义,我们可以简单地扩展和覆盖它的抽象方法,然后将它抽象化的逻辑是什么?

8 个答案:

答案 0 :(得分:2)

假设您将建造许多不同类型的汽车:家用汽车,跑车,F1汽车......

对于所有这些,accele()方法将具有非常不同的实现。 假设您不会将Car设为抽象类,并提供加速实现。

如果有人要制造F1赛车,他可能会想:我们已经拥有加速功能,没有理由不使用它。最后,我们最终可能会以完全相同的方式加速所有类型的汽车。

这将导致非常缓慢的F1比赛,或基本的交通,即使Flash也不想成为行人。

抽象类是告诉'做什么',而不是'应该怎么做',但也有可能添加一些非抽象的方法,不像接口。

答案 1 :(得分:2)

抽象方法不能有实现,因此不会在抽象类中提供实现只是为了在(具体)子类中覆盖它。

抽象方法的目的是定义所有子类将拥有的公共行为。但是,此行为在抽象类的级别上是未知的。举一个简单的例子:

abstract public class Animal {
    public abstract void eat();
}

public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("I eat dog biscuits");
    }
}

在这里,所有Animal都吃了,但我们一开始就不知道它们吃了什么,直到我们创建了一个特定的子类。抽象方法非常适合这个问题。

答案 2 :(得分:1)

类动物:

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();
}

总之,正如您所说,抽象类给出了定义。定义可能很重要,尤其是当我想在不知道细节的情况下实现特定逻辑时。

答案 3 :(得分:0)

每当你不想允许你的班级实例时,你需要把它作为抽象类。

此外,抽象类可以包含一些方法,这些方法是所有子类的通用逻辑。

希望它有所帮助。

干杯。

答案 4 :(得分:0)

抽象类无法实例化。通过创建一个类摘要,您可以清楚地告知其用户它只是为扩展而设计的。

答案 5 :(得分:0)

假设您有一个抽象类Shape2D。你知道,你可以画出类似的东西,但确切地说,如何?您无法为Shape2D定义方法draw()。这个方法只是一个概念,可以绘制Shape2D的对象。

答案 6 :(得分:0)

使它成为抽象的原因是你不会从这个特定的类创建实例,因为它没有扩展行为(由其子类实现)是不完整的。

它为其子类提供了一种通用行为,因此您不必为每个子类编写此常见行为

答案 7 :(得分:0)

您创建抽象类以确保没有人将实例化。抽象类可能有主要逻辑,但仍需要一些应由抽象方法提供的信息。