2017-12-18 10 views
-1

私はオブジェクト指向プログラミングの概念を学んでいます。それらの1つは抽象です。私は、抽象メソッドを含むどのクラスも抽象クラスでなければならず、抽象クラスをインスタンス化できないことを理解しています。抽象クラスを使用するには、別のクラスから継承する必要があります。抽象メソッドとクラスの使用が不明確

これまでのところとても良いです。その後

public void start(){ 
    System.out.print(""); 
} 

:以下のコードてみましょう:

public abstract class Games { 

    public abstract void start(); 

    public void stop(){ 
     System.out.println("Stopping game in abstract class"); 
    } 
} 

class GameA extends Games{ 
    public void start(){ 
     System.out.println("Starting Game A"); 
    } 
} 

class GameB extends Games{ 

    public void start(){ 
     System.out.println("Starting Game B"); 
    } 
} 

をそして、我々はmainメソッドを持つクラスを持っている:

public class AbstractExample { 

    public static void main(String[] args){ 
     Games A = new GameA(); 
     Games B = new GameB(); 

     A.start(); 
     A.stop(); 

     B.start(); 
     B.stop(); 
    } 
} 

しかし、私はクラスGamesに次のように書かれている可能性がabstractである必要はなく、出力は同じで、Gamesクラスをインスタンス化することさえできます。抽象メソッドとクラスを作る鍵は何ですか?

+1

ソフトウェアエンジニアリングスタックに[良い説明]があります(https://softwareengineering.stackexchange.com/questions/96947/why-should-i-declare-a-class-as-an-abstract-class)。 。 – azurefrog

+1

「ゲーム」を具体的なクラスにする理由を考えることができれば、ぜひそのメソッドを実装してください。抽象化は、クラスのインスタンスを持つことに意味がないクラスです。 – jsheeran

+0

あなたが提案した 'start()'メソッドは、そうでない場合、それを抽象的にマークすることができます:ダミーの実装を提供することは意味がなく、クラス**はそれを実装しなければなりません。 –

答えて

1

つまり、ある意味で抽象クラス/インタフェースは、契約の独自の実装を提供する必要がある契約です。たとえば、ファイル、データベースなどに書き込むことができるロギングライブラリを作成しています。基礎となるioに永続する機能を実装するには、どのような方法をとるべきか考えてください。これを実現するには、インタフェース/抽象クラスのインスタンスでコードを動作させる必要があります。 これらの2つの違いは、インターフェイスが実装されていないほど単純です。さて、Java 8までは、気にすることはありませんが、それはATMを気にするものではありません。 抽象クラスには、特定のメソッドを実装することができます。書き込みの試行が成功しなかった場合など、再試行します。しかし、実際の書き込み操作は、それを実装する操作にのみ存在します。インターフェイスはできません。

0

抽象クラスは、単一のプログラマープロジェクトではあまり意味がありません。そのメソッドを実装するクラスから継承したプログラマが取得したコミットメントとして、それらを見ることができます。

+0

1つのプログラマープロジェクトであっても、抽象クラスは意味を成していますが、それらはビヘイビアテンプレートであり、インプリメントするサブクラスは空白を埋めます。 –

+0

なぜあなたはそれをあなた自身にしますか? :) – Andres

+0

どうしてですか?それは難しくはありませんし、それはあなたが何年も後でなければそのコードの月に再訪するときに役立つかもしれない自己文書化の形式を提供します。 –

関連する問題