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()。クラスに抽象メソッドが1つでも含まれていると、クラス全体が抽象クラスになるという本を読みました。それで、私の質問は、クラス B が抽象になるかどうかです???

4

10 に答える 10

1

クラスは、「抽象クラス」として宣言されている場合にのみ抽象です。抽象クラスを拡張したり、抽象メソッドを含めたりするなど、他のすべてのことは、クラスが抽象になることを意味しません。ただし、コンパイルの失敗につながります。

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

抽象クラスは、abstract と宣言されたクラスです。抽象メソッドが含まれる場合と含まれない場合があります。

抽象クラスがサブクラス化されると、通常、サブクラスはその親クラスのすべての抽象メソッドの実装を提供します。ただし、そうでない場合は、サブクラスも抽象宣言する必要があります。

于 2013-08-13T14:53:34.393 に答える
0

考えてみてください:

抽象的 とはどういう意味ですか? (文字通り) 。アイデアとしてのみ存在するもの。

現在、少なくとも 1 つの抽象メソッドを持つクラスはすべて抽象クラスです。

  • area()in A はアイデアとしてのみ存在します。つまり、実際の実装はありません。
  • area()in B には実装があり、それは単なるアイデアではありません。

概念を理解していただければ幸いです。構文的には、abtract メソッドは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 から abstract メソッドに渡されていarea()ますAclass Bそれがあなたの場合は抽象的ではない理由です。

于 2013-08-13T14:54:50.570 に答える
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 に答える