我有一个抽象类,有两个未实现的(抽象)方法,一个实现的方法和一个静态方法,如下面的代码。
public abstract class AbstractClass1 {
static void test(){
System.out.println("111");
}
public abstract void test2();
public abstract void test3();
public void test4(){
System.out.println("222");
}
}
我在其他一些抽象类中扩展此类,如下面的代码
public abstract class AbstractClassImplementation
extends AbstractClass1 {
public static void main(String[] args) {
System.out.println("java abstract doubt");
}
}
我怀疑是否包含抽象方法的AbstractClass1类意味着每当我们在子类中扩展它时我们必须重写;但如果子类是抽象的,那么这里没有显示错误
假设我的子类不是抽象的;这次我必须覆盖“AbstractClass1”类中可用的所有未实现的方法,参见下面的例子
public class AbstractClassImplementation extends AbstractClass1{
public static void main(String[] args) {
System.out.println("java abstract doubt");
}
@Override
public void test2() {
System.out.println("overrided here");
}
@Override
public void test3() {
System.out.println("overrided here");
}
}
有人可以解释一下吗?
答案 0 :(得分:2)
AbstractClassImplementation
本身就是abstract
,因此不必覆盖所有abstract
方法。只有具体的(非abstract
)类必须实现所有abstract
方法。
答案 1 :(得分:2)
由于您的子类也是抽象的(无法初始化),您不必实现这些方法,但本例中的子子类(如果不是抽象的)将必须实现那些抽象方法
答案 2 :(得分:1)
无需在AbstractClass2
中检查抽象方法的实现,因为对象无法实例化为AbstractClass2
。
派生自AbstractClass2
的任何具体类必须实现AbstractClass1
和AbstractClass2
中的所有抽象方法。
答案 3 :(得分:1)
子类不需要实现抽象超类的方法。所需要的只是任何具体的类(您可以初始化的类)必须实现其所有超类(包括接口)中尚未实现的所有方法。其他类不需要实现它们。
答案 4 :(得分:1)
因为在第二个代码片段中,AbstractClassImplementation本身是抽象的,所以它没有显示任何错误。
以下Orcale对此有何评论
当抽象类被子类化时,子类通常提供 其父类中所有抽象方法的实现。 但是,如果没有,则还必须声明子类 抽象。