覆盖抽象方法是指java中的类抽象类?

时间:2013-08-13 14:49:25

标签: java

abstract class A {
    abstract void area();
}

class B extends A {
    void area(){
        System.out.print("area by class B");
    }
}    

问题: -

此处,类A是一个抽象类,包含一个抽象方法area()。   然后,类B extends抽象类A并覆盖抽象   方法area()。我在一本书中读到,如果一个班级甚至包含一个   抽象方法然后整个类成为抽象类。所以,我的问题   B级是否变得抽象?

10 个答案:

答案 0 :(得分:4)

如果扩展A并实现抽象方法(就像你所做的那样),B不必是抽象的。

在相关的说明中,如果您只有一个抽象方法而没有具体方法,则可以将抽象类声明为接口,如下所示:

interface class A {
   void area();
}

class B implements A {
  void area(){
     System.out.print("area by class B");
  }
}    

答案 1 :(得分:3)

不,你的类B不是抽象的,它不需要是抽象的,因为它不包含任何抽象方法;它具有area()的具体实现。

可以仍然将其声明为abstract,在这种情况下它会是:

abstract class B extends A {
    void area() {
        System.out.print("area by class B");
    }
}

因此,具有抽象方法的类意味着类必须被声明为abstract,但是没有抽象方法的类并不一定意味着它不能。

答案 2 :(得分:1)

他们的意思是,

  • 如果类中有任何抽象方法,那么该类应该声明为abstract
  • 在您的课程中,课程B不是abstract
  • abstract类可以使用非抽象方法,但abstract方法不能在具体类中。即如果方法是抽象的,则必须将类声明为abstract

答案 3 :(得分:1)

只有在声明为“抽象类”时,该类才是抽象的。所有其他的东西,比如扩展抽象类或包含抽象方法,并不意味着一个类变成抽象的。但是,会导致编译失败。

http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

  

抽象类是一个声明为abstract的类 - 它可能包含也可能不包含抽象方法。

     

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

答案 4 :(得分:0)

不。因为B类没有抽象方法。它具有实现的方法区域()。

由于B类继承自A,因此必须具有该方法。

答案 5 :(得分:0)

B没有任何抽象方法。 B只是覆盖了一个抽象方法并实现它,因此它不再是抽象的。所以,B不是抽象的。

答案 6 :(得分:0)

如果你做了类似以下的事情:

abstract class A {

   abstract void area();

}

abstract class B extends A {


  abstract void area();

}    

这将是抽象类B中的抽象方法。

答案 7 :(得分:0)

想一想:

  
    

抽象是什么意思? (字面)      。只作为一个想法存在的东西。

  

现在任何具有至少1个抽象方法的类都是Abstract类。

    A中的
  • area()只是作为一个想法存在,即没有真正的实现。
  • B中的
  • area()有一个实现,它不仅仅是一个想法了。

希望您理解这个概念。在语法术语中,abtract方法将abstract作为其修饰符。

答案 8 :(得分:0)

And also read docs

  

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

否则否。

答案 9 :(得分:0)

abstract class A {
   abstract void area();
}

class B extends A {

}

请参阅上面的情况class B应该是抽象的,因为它不提供area()的实现(正文)。 但在你的情况下,你已经从area()给了身体抽象方法A。这就是class B在你的情况下不抽象的原因。