2016-05-27 6 views
2

メソッドオーバーライドとは、サブタイプのスーパータイプメソッドの実装が異なることを意味します。抽象メソッドがある場合、クラスが抽象メソッドを含むクラスを継承するたびにそれを実装する必要があります。メソッドオーバーライドと似ているのではないですか?抽象メソッドのさまざまな実装がオーバーライドとして表示できますか?

+4

※オーバーライドしています! –

答えて

0

Java Language Specificationこのため、「オーバーライド」という用語を使用する:非抽象メソッドMCはクラスCから抽象メソッドMAをオーバーライドした場合、MCはC.

からミリアンペアを実現すると言われ、

ここでは、オーバーライドという用語は、抽象メソッドを実装する場合も含めて使用されます。実装は、オーバーライドの特殊なケースとして記述されています。

0

あなたはメソッド本体とメソッドを持つクラスを拡張する場合の方法は、抽象的であるならば、あなたはがそれを(オーバーライド)を実装したり、サブクラス自体が抽象的に宣言しなければならないのどちらか一方で、あなたは、メソッドをオーバーライドすることができます。

抽象メソッドにはメソッドボディがありません。

+1

しかし、その抽象メソッドを実装している別のクラスは、実際に実装するたびに異なる実装を行います。メソッド本体を持たないという議論は私にとっては有効ではないようです。さらに説明してください。 –

+0

それは本質的に同じです。どちらの場合もメソッドをオーバーライドしています:メソッドが抽象メソッドであるかどうかは関係ありません。そこで、両方の例で '@ Overrides'を書くことができます。抽象メソッドと非抽象メソッドの違いは私の答えで説明されています:) – Exfridos

0

@Overrideアノテーションを使用することはできますが、抽象メソッドの実装はIMHOをオーバーライドしません。

の実装は無効にすることができます。抽象メソッドを実装した具象クラスのサブクラスでは、具象クラスの実装をオーバーライドできますが、その時点で実装されているメソッドはもはや抽象型ではありません。

+0

抽象クラスを継承するクラスがあり、抽象クラスも同様に実装するインターフェイスを実装している場合は、インターフェイスに抽象メソッドがあります私の抽象クラスはその抽象メソッドを実装しており、具体クラスもそのメソッドを実装しています。具象クラスはその抽象メソッドをインタフェースから実装するか、抽象クラスからの抽象メソッドをオーバーライドしますか? –

0

オーバーライドしています。

証明:

abstract public class Shape { 
    public abstract void draw(); 
} 

public class Square extends Shape { 
    @Override // this does not fail! 
    public void draw() { 
     System.out.println("I am square!"); 
    } 

    public static void main(String[] args) { 
     Shape s = new Square(); 
     s.draw(); 
    } 
} 

このがない@Overrideの使用はエラーとしてコンパイラ(注釈プロセッサ)によってフラグが付けられている必要があり、オーバーライドされていました。

関連する問題