0
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类是否变得抽象???

4

10 回答 10

4

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

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

interface class A {
   void area();
}

class B implements A {
  void area(){
     System.out.print("area by class B");
  }
}    
于 2013-08-13T14:50:42.173 回答
3

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

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

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

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

于 2013-08-13T14:51:10.337 回答
1

只有当它被声明为“抽象类”时,该类才是抽象的。所有其他的事情,比如扩展抽象类或包含抽象方法,并不意味着一个类变得抽象。虽然,会导致编译失败。

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

抽象类是被声明为抽象的类——它可能包含也可能不包含抽象方法。

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

于 2013-08-13T14:53:34.393 回答
1

他们的意思是,

  • 如果一个类中有任何抽象方法,那么这个类应该被声明为抽象的
  • 在你的课堂上,课堂B不是abstract
  • abstract可以有非抽象方法,但abstract方法不能在具体类中。即如果一个方法是抽象的,类必须被声明为抽象的
于 2013-08-13T14:51:43.117 回答
0

想一想:

抽象是什么意思?(字面上地) 。仅作为想法存在的东西。

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

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

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

于 2013-08-13T14:54:28.000 回答
0

并阅读文档

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

否则否。

于 2013-08-13T14:54:50.147 回答
0
abstract class A {
   abstract void area();
}

class B extends A {

}

看,上面是应该抽象的情况,class B因为它不提供area(). 但是在您的情况下,您已经将 body 赋予了抽象方法area()from A。这就是class B你的情况不是抽象的原因。

于 2013-08-13T14:54:50.570 回答
0

不是。因为B类没有抽象方法。它所拥有的是带有实现的方法 area()。

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

于 2013-08-13T14:52:28.583 回答
0

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

于 2013-08-13T14:52:57.107 回答
0

如果您执行以下操作:

abstract class A {

   abstract void area();

}

abstract class B extends A {


  abstract void area();

}    

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

于 2013-08-13T14:52:57.663 回答