2012-02-24 4 views
1

私はこれに対してジレンマを持っています。私はプロジェクトを設計しています。基本的には、エンティティクラスがベースクラスから継承するベースクラス - >エンティティクラスの関係になります。今、もし構文エラーを言い訳してください、私はその場でそれを作った抽象クラスまたは子クラスに変数を追加しますか?

public class MyChildClass extends MyAbstractClass{ 

    private int _hId = 0; 
    private String _hName = ""; 

    public int getHouseId(int id) 
    { 
     if(id > _hId) 
     { 
      return _hId; 
     } 
     return id; 
    } 
    public String getHouseName(String s) 
    { 
     if(s.Equals(_hName)) 
     { 
      return _hName; 
     } 
     return s; 
    } 

     //AND YOU HAVE YOUR SETTERS SOMEWHERE HERE 
    } 

:今すぐ基底クラスは抽象的であるとのようなものだろう。そして、私のような何かをしたいと思います

abstract class MyAbstractClass{ 

//All this methods need to be implemented 
abstract int getHouseId(int id); 
abstract string getHouseName(String s); 

} 

を私の質問は、より抽象クラスの変数を宣言し、設定し、そこからものを得るか、または子クラスの変数を作成する方が良いですか?私はそれを抽象クラスで使っても混乱していますが、抽象クラスでどのように宣言すればいいですか?それらをプライベートクラスにしてプロパティを追加して値を取得することはできますか?クラス?。基本的に私は実装しなければならない関数として抽象クラスを常に使用するように一連のプログラマを強制したいと考えています。私はそれをgoogleにしようとしましたが、抽象クラスの変数やプロパティに関する記事は多く見えませんでした。多分子クラスで使うべきです。私にこれを理解させる助けに感謝します。

答えて

2

は、それは抽象クラスで変数を宣言し、そこからのものを設定および取得、または子クラスに変数を作成することをお勧めします?。

アイデアは、重複を最小限に抑えることです。各サブクラスでロジックと変数を複製する場合は、スーパークラスで使用する方がよいでしょう。

彼らは抽象クラスで宣言されなければならないか、抽象クラスでそれを使用している場合、私はプライベートそこにそれらを作ることができ

...と値を取得するプロパティを追加?

一般実際に抽象クラスで変数をprivateにすることです。 public/protected getter/setterを使用して変更/アクセスします。

基本的に私はいつも彼らが実装しなければならない機能として、抽象クラスを使用するプログラマのセットを強制したい...

だから、ここに行きます。属性とgetter/setterを抽象クラスにします。そして、開発者が独自のロジックで実装してほしいという抽象メソッドのみを抽象化します。

1

抽象クラスの全体的なアイデアは、彼らはあなたが含まれているために、すべてのサブのクラスを必要とするいくつかの動作やデータを含めることができるということです。だからあなたはそれらを非公開にしてゲッターとセッターを提供することができます。

それとも、すべてのサブクラスで使用する必要のある定数を持っている場合、その後のpublic static finalとしてそれらを定義します。

はこちらをご覧:

Java - Abstract class to contain variables?

1

それは本当にあなた次第ですが、一部の機能は、各派生クラスによって必要とされている場合、それはあなたのabstractベースクラスに追加しても意味がと思います。これには、変数、定数、メソッドなどが含まれます。

クラスを作成することでgetterとsetterのどちらも実装できないわけではありません。これらの変数をabstract基底クラスにカプセル化し、派生クラスでこれらのメソッドを呼び出して変数にアクセスすることができます。これは一般的な方法であることがわかります。 MyChildClassは実際にはabstractの基本クラスになり、これだけ行います。

abstractクラスで宣言された変数を必要としない場合や、派生クラスに特定の関数の実装が含まれていてほしい場合は、代わりにinterfaceとなります。

関連する問題