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级是否变得抽象?
答案 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)
他们的意思是,
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类。
area()
只是作为一个想法存在,即没有真正的实现。area()
有一个实现,它不仅仅是一个想法了。希望您理解这个概念。在语法术语中,abtract方法将abstract
作为其修饰符。
答案 8 :(得分:0)
答案 9 :(得分:0)
abstract class A {
abstract void area();
}
class B extends A {
}
请参阅上面的情况class B
应该是抽象的,因为它不提供area()
的实现(正文)。
但在你的情况下,你已经从area()
给了身体抽象方法A
。这就是class B
在你的情况下不抽象的原因。