使用下列样式之一从抽象父类声明方法的优点/缺点是什么:
选项1:
家长班:
protected Object retrieve(String id, Object model){
return null;
}儿童班:
@Override
public String retrieve(Object model) {
if (model instanceof Car)
// ... somehow get id ...
return getInfo(id, (Car)model);
return null;
}或者..。
备选方案2:
家长班:
protected abstract Object retrieve(String id, Object model);儿童班:
public String retrieve(String id, Object model) {
if (model instanceof Car)
return getInfo(id, (Car)model);
return null;
}发布于 2013-01-03 02:32:54
带有抽象类的,保证子对象将覆盖抽象方法(如果有)(或其本身是抽象的)。它们也不能被实例化,这很重要,因为它们缺少功能(抽象方法)。
另见java
抽象类类似于接口。您不能实例化它们,但可以扩展它们。任何扩展抽象类的类都必须向抽象方法提供实现。因此,这些类可以用作可能需要某些公共功能的类似类的框架。这些功能也可以嵌入到这些类中。与接口不同,抽象类也可以有方法代码。所以它们非常有用。
发布于 2013-01-03 02:32:56
在我看来,只有当所有的子类都不会实现这个函数时,才需要第一风格(可能更好地用接口来表达)。如果它是一个必要的函数,那么更清楚地说是抽象的,而则不是那么容易出错的,因为编译器会督促您实现它。
发布于 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是非法的。
还请注意,这是可能的:
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();
}https://stackoverflow.com/questions/14132285
复制相似问题