Java接口和抽象类问题

乔治2:

我正在阅读这本书-Hadoop:权威指南

在第2章(第25页)中,提到了“新API相对于接口更喜欢抽象类,因为它们易于开发。例如,您可以在抽象类中添加方法(具有默认实现)而不会破坏旧的实现。类”。它是什么意思(特别是什么意思是“破坏类的旧实现”)?欣赏是否有人可以向我展示一个示例,为什么从这个角度来看抽象类比接口更好?

预先感谢乔治

乔伊:

对于接口,必须由实现该接口的类来实现在接口中定义的所有方法

给定接口A

interface A {
    public void foo();
}

和B类:

class B implements A {
}

必须提供接口中定义的方法的实现:

class B implements A {
    @Override
    public void foo() {
        System.out.println("foo");
    }
}

否则,这是编译时错误。现在使用一个抽象类该类具有方法的默认实现

abstract class C {
    public void bar() {
        System.out.println("bar");
    }
}

从该抽象类继承的类如下所示:

class D extends C { }

没有错误。但是如果愿意的话,它也可以覆盖默认方法的实现。

作者在那儿说的是:如果您的API尚不稳定,并且您需要调整接口(是的,抽象类也是接口(以OOP的形式讲)),那么抽象类允许您添加内容而不会破坏那些已经在那里。但是,这仅适用于非抽象方法。如果添加抽象方法,则仍需要在每个派生类中实现它们。但是,如果您的API仍在不断发展并且已经建立了很多东西,它可以使您的生活更轻松。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章