首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java方法:@Override抽象

Java方法:@Override抽象
EN

Stack Overflow用户
提问于 2013-01-03 02:30:59
回答 4查看 2.1K关注 0票数 1

使用下列样式之一从抽象父类声明方法的优点/缺点是什么:

选项1:

家长班:

代码语言:javascript
复制
protected Object retrieve(String id, Object model){
        return null;
}

儿童班:

代码语言:javascript
复制
@Override
public String retrieve(Object model) {
    if (model instanceof Car)
        // ... somehow get id ...
        return getInfo(id, (Car)model);
    return null;
}

或者..。

备选方案2:

家长班:

代码语言:javascript
复制
protected abstract Object retrieve(String id, Object model);

儿童班:

代码语言:javascript
复制
public String retrieve(String id, Object model) {
    if (model instanceof Car)
        return getInfo(id, (Car)model);
    return null;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-03 02:32:54

带有抽象类的,保证子对象将覆盖抽象方法(如果有)(或其本身是抽象的)。它们也不能被实例化,这很重要,因为它们缺少功能(抽象方法)。

另见java

抽象类类似于接口。您不能实例化它们,但可以扩展它们。任何扩展抽象类的类都必须向抽象方法提供实现。因此,这些类可以用作可能需要某些公共功能的类似类的框架。这些功能也可以嵌入到这些类中。与接口不同,抽象类也可以有方法代码。所以它们非常有用。

这也可能有帮助:https://softwareengineering.stackexchange.com/questions/96947/why-should-i-declare-a-class-as-an-abstract-class

票数 4
EN

Stack Overflow用户

发布于 2013-01-03 02:32:56

在我看来,只有当所有的子类都不会实现这个函数时,才需要第一风格(可能更好地用接口来表达)。如果它是一个必要的函数,那么更清楚地说是抽象的,而则不是那么容易出错的,因为编译器会督促您实现它。

票数 3
EN

Stack Overflow用户

发布于 2013-01-03 02:42:59

你在这里把苹果和橘子混合在一起,也许还有更多:

  • @Override是一个编译时(@Retention(value=SOURCE))、方法级(@Target(value=METHOD))注释,编译器使用它来检查给定的方法:。
    • interface实现一个方法(注意: JDK 1.6+),或者
    • abstract类实现abstract方法,或
    • 重写父类的非final方法(无论父类是、final还是);

  • abstract是一个语言关键字,可以在类级别或方法级别声明:。
    • 如果在类级别,这意味着不能直接实例化该类,因此必须将其子类(然而,这样的abstract类可以承载返回自身子类的static工厂方法);
    • 如果在方法级别,该方法只有一个原型(见下文),子类必须实现此方法;

注意,如果类本身不是abstract,则将该方法声明为abstract是非法的。

还请注意,这是可能的:

代码语言:javascript
复制
public abstract class MustHaveToString
{
    // .toString() is implemented in Object, here we FORCE children of that class
    // to re-implement it. As the method is abstract, we only declare its 
    // prototype (its return type and method arguments, in this case, none).
    // As the method originates from one of our parents (Object), 
    // we can also @Override it!
    @Override
    public abstract String toString();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14132285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档