サーチ…


備考

注意:Javaではマルチレベルの継承が許可されていますが、多重継承はできません。詳細はhttp://beginnersbook.com/2013/04/oops-concepts/をご覧ください。

継承 - 定義

継承は、 オブジェクト指向プログラミング(OOP)の主な概念の1つです。継承を使用すると、問題を適切にモデル化でき、書き込む行数を減らすことができます。一般的な例を使って継承を見てみましょう。

あなたはOOPを使って動物界(単純化された動物界、もちろん生物学者、私を赦してください)をモデル化しなければならないと考えてください。動物の種がたくさんあり、いくつかはユニークな特徴を持っていますが、いくつかは同じ機能を共有しています。

動物の主な家族があります。たとえばMammalsReptiles

それから私たちはその家族の子供たちを抱えています。たとえば、

  • CatDogLionは哺乳動物です。
  • CobraPythonは爬虫類です。

すべての動物はeatdrinkmoveなどの基本的な機能を共有しています。したがって、我々はAnimalと呼ばれる親を持つことができ、それらの基本機能を継承できると言うことができます。

その家族はまた、いくつかの機能を共有します。例えば、爬虫類はクロールを使って移動します。すべての哺乳動物は、生涯の初期にfed milkfed milkます。

それから、それぞれの動物のためのいくつかのユニークな特徴があります。

これらの動物種を別々に作りたいのかどうか検討してください。すべての動物種に何度も同じコードを書く必要があります。その代わりに、私たちは継承を使用します。動物の王国を次のようにモデル化することができます:

  • すべての動物の基本的な特徴を持つ親オブジェクト、 Animalを持つことができます。
  • MammalReptile (もちろん他の動物ファミリーも)は、親オブジェクトであるAnimalから基本的な機能を継承しながら、共通の機能を持つオブジェクトをAnimalます。
  • 動物種オブジェクト: CatDogMammalオブジェクトから継承し、 CobraPythonReptileオブジェクトから継承します。

このフォームでは、各動物種の動物の基本的な機能を定義する必要がないため、 Animalオブジェクトに定義して継承することができるため、記述するコードを減らすことができます。動物の家族と同じことが起こります。

継承の例 - 以下の2つのクラスを考慮する

教師クラス:

class Teacher {
       private String name;
       private double salary;
       private String subject;
       public Teacher (String tname)  {
           name = tname;
       }
       public String getName()  {
           return name;
       }
       private double getSalary()  {
           return salary;
       }
       private String  getSubject()  {
            return  subject;
       }
    }

OfficeStaffクラス:

class  OfficeStaff{
   private String name;
   private double salary;
   private String dept;
   public OfficeStaff (String sname)  {
      name = sname;
   }
   public String getName()  {
       return name;
   }
   private double  getSalary()  {
       return salary;
   }
   private String  getDept ()  {
       return dept;
   }
}
  1. どちらのクラスも共通のプロパティとメソッドを共有していません。したがって、コードの繰り返し。
  2. 共通のメソッドとプロパティを含むクラスを作成する。
  3. TeacherクラスとOfficeStaffクラスは、Employeeクラスの下からすべての共通のプロパティとメソッドを継承できます。

従業員クラス:

class Employee{
   private String name;
   private double salary;
   public Employee(String ename){
      name=ename;
   }
   public String getName(){
      return name;
   }
   private double getSalary(){
      return salary;
   } 
}
  1. 個々のメソッドとプロパティを追加するオブジェクトのセットに共通の属性を定義するスーパークラスを作成したら、それを使用して任意の数のより特定のサブクラスを作成できます
  2. エンジニア、プリンシパルのような類似のクラスは、Employeeクラスのサブクラスとして生成できます。
  3. 親クラスはスーパークラス、継承クラスはサブクラス
  4. サブクラスは、スーパークラスの特殊バージョンです。スーパークラスによって定義されたすべてのインスタンス変数とメソッドを継承し、独自の固有の要素を追加します。
  5. サブクラスはそのスーパークラスのメンバのすべてを含むが、プライベートとして宣言されたスーパークラスのメンバにアクセスすることはできない。
  6. スーパークラスの参照変数は、そのスーパークラスから派生したサブクラス、つまりEmployee emp = new Teacher()への参照に割り当てることができます。


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow