在Java中,一个类是否需要使用abstract关键字呢?或者说,它是否需要包含未实现的(抽象)方法呢?任何普通类都能被继承吗?
在Java中,一个类是否需要使用abstract关键字呢?或者说,它是否需要包含未实现的(抽象)方法呢?任何普通类都能被继承吗?
是的,所有非 final 的方法(静态方法与其他方法略有不同)都可以被覆盖,除非该类本身被声明为 final。如果在基类中没有提供任何实现,则只能使用抽象方法。
任何普通类都可以被扩展吗?
是的 :) 除非它有final修饰符。
不需要使用"abstract"这个单词,使用这个单词会导致你无法直接创建该类的实例。如果使用"abstract",只能创建继承该抽象类的类的实例。
AbstractClass abs = new ChildClass();
是的,您可以扩展一个类而无需将其定义为抽象类。这意味着您将覆盖方法。例如,您可能会创建一个类
DifferentString extends String
那么,
public String toString()
{
return "Something different";
}
http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
是的,但是如果类被标记为final,则无法扩展。
class Foo {
//some code here
}
class Boo extends Foo {
}
正如其他人所说,是的 - 但如果可能的话最好避免这样做,因为你可能更容易遇到所谓的脆弱基类问题。
这里存在一些概念上的混淆。未实现的方法存在于一个接口中,而你可以实现该接口。
只要不是final类,你都可以扩展它。
编辑:我的意思是最好也将未实现的方法放在接口中。抽象类也可以有未实现的方法,但你最终会得到一个复杂和严格的层次结构。