请解释抽象类VS具体类之间的区别?

时间:2015-04-24 11:42:00

标签: java abstract-class

我有一个抽象类,有两个未实现的(抽象)方法,一个实现的方法和一个静态方法,如下面的代码。

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");

 }
}

有人可以解释一下吗?

5 个答案:

答案 0 :(得分:2)

AbstractClassImplementation本身就是abstract,因此不必覆盖所有abstract方法。只有具体的(非abstract)类必须实现所有abstract方法。

答案 1 :(得分:2)

由于您的子类也是抽象的(无法初始化),您不必实现这些方法,但本例中的子子类(如果不是抽象的)将必须实现那些抽象方法

答案 2 :(得分:1)

无需在AbstractClass2中检查抽象方法的实现,因为对象无法实例化为AbstractClass2

派生自AbstractClass2的任何具体类必须实现AbstractClass1AbstractClass2中的所有抽象方法。

答案 3 :(得分:1)

子类不需要实现抽象超类的方法。所需要的只是任何具体的类(您可以初始化的类)必须实现其所有超类(包括接口)中尚未实现的所有方法。其他类不需要实现它们。

答案 4 :(得分:1)

因为在第二个代码片段中,AbstractClassImplementation本身是抽象的,所以它没有显示任何错误。

以下Orcale对此有何评论

  

当抽象类被子类化时,子类通常提供   其父类中所有抽象方法的实现。   但是,如果没有,则还必须声明子类   抽象。