概念:継承とは、クラスの定義が別の既存のクラス、つまりサブクラスが親クラスを継承し、それによって親クラスのコードの再利用を実現できることを意味します。 2つのクラス間の関係:親クラスには一般に、各サブクラスに共通の特性がありますが、サブクラスはよりパーソナライズされた方法を追加できます。クラスの継承は推移的です。つまり、サブクラスは引き続きサブクラスを導き出し、上層階にあるクラスの概念はより抽象的であり、下位レベルにあるクラスの概念はより具体的です。
1.サブクラスの定義:
構文形式
[修飾子]クラスサブクラス名は親クラス名を拡張します{
サブクラス
}
修飾子:パブリックプライベート保護されたデフォルト
サブクラスボディは、親クラスのコンテンツを継承することに基づいて、サブクラスによって追加された新しいユニークなコンテンツです。メンバー変数、メンバー方法、クラス、インターフェイス、建設方法などを含めることができます。
たとえば、会社では、従業員は会社に雇われたスタッフであり、マネージャーは管理会社の特別な従業員です。このタイプの特別な従業員は、普通の従業員の属性と方法だけでなく、特別な手当など、独自の属性と方法もあります。
コードは次のとおりです。
public class employeeClass {private string name; // [プライベートint idに名前]; //会社番号プライベートダブルサラリー。 //給与プライベート文字列部; //パブリックemployeeClass(){} publiceeclass(string name、int id、double Salary、string Department){this.name = name; this.id = id; this.salary = salary; this.department = department; } public string getname(){return name; } public void setName(string name){this.name = name; } public int getId(){return id; } public void setid(int id){this.id = id; } public double getSalary(){return Salary; } public void setSalary(double Salary){this.salary = salary; } public string getDepartment(){return Department; } public void setDepartment(String Department){this.department = department; } @Override public String toString(){return "employeeClass [name =" + name + "、id =" + id + "、salary =" + salary + "、department =" + department + "]"; }}これは、4つの属性、名前、番号、給与、部門がある従業員クラスのコードです。
Public Class Mangerclassは、EmployeEclass {private double Specialsalaryを拡張します。 public Managerclass(){super();} public mangererclass(string name、int id、double Salary、string department、double specialsarary){super(name、id、salary、department); this.specialSalary = SpecialSalary; } public double getSepecialSalary(){return specialsalary; } public void setspecialsalary(double specialsalary){this.specialsalary = specialsalary; } @Override public String toString(){return super.toString() + "/specialsal:" + specialsalary; }}これは、独自の属性、特別な手当を備えたサブクラス、マネージャークラスです。
2。親クラスメンバーへのサブクラスアクセシビリティ
サブクラスは親クラスのメンバーを継承できますが、親クラスのメンバーへのアクセスはアクセス機能によって制御されます。
親クラスとチャイルドクラスは同じパッケージにあります。プライベートに直接アクセスすることはできませんが、パブリックアクセス属性を備えたメンバーメソッドを介して親クラスのプライベートメンバーを取得できます。
親クラスとチャイルドクラスは同じパッケージに含まれていません。プライベートとデフォルトに直接アクセスすることはできませんが、パブリックおよび保護されたアクセスプロパティを使用して、メンバーメソッドを通じて親クラスのプライベートメンバーを取得できます。
3。クラスメンバーのメソッドの過負荷と上書き
サブクラスで定義されている新しいメンバー変数の名前が親クラスのメンバー変数と同じである場合、サブクラスは親クラスの対応するメンバー変数を隠します。
メンバーメソッドのオーバーロードまたはオーバーライドは、親クラスで定義されたメンバーメソッドの名前が親クラスのメンバーメソッドの名前と同じである場合、サブクラスで定義されたメンバーメソッドです。
(1)メンバー方法の過負荷
前述の従業員およびマネージャーのチェスナットでは、従業員クラスでメンバー方法を定義できます
public void setinfo(string name、int id、double Salary、string department){this.name = new String(name); this.id = id; this.salary = salary; this.department = new String(Department); }マネージャークラスでは、次のように定義できます。
public void setinfo(string name、int id、double Salary、string department、double specialsalary){super(name、id、salary、department); this.specialSalary = SpecialSalary; }これはメンバーメソッドの過負荷です
(2)メンバーメソッドのオーバーライド
通常、2つのフォームがあります。
subclassで定義されたメンバーメソッドで、最初に親クラスのオーバーライドされたメンバーメソッドを呼び出してから、いくつかの操作ステートメントを追加します。
subclassによって定義されたメンバーメソッドでは、親クラスによって上書きされたメンバーメソッドは呼び出されませんが、声明グループが書き直されます。これにより、親クラスの完全なカバレッジが可能になります。この方法は、サブクラスの操作が親クラスオブジェクトの操作とはまったく異なる場合に実装する必要があります。
栗:
オブジェクトクラスには、2つのオブジェクトが等しいかどうかを決定するメンバーメソッド等しい()があり、そのコードは次のとおりです。
public boolean euqals(object obj){return(this == obj); }このメンバー方法は、2つのオブジェクトが同時に1つのオブジェクトを参照するかどうかを比較することであることがわかります。
しかし、同じタイプの2つのオブジェクトの内容が等しいかどうかを比較する関数を実装したいと考えています。そのため、以下に複数のクラスがあり、各複数のクラスは実際の部分と想像上の部分で構成されています。設計関数は、2つの複雑な数値が等しいかどうかを比較できます。コードは次のとおりです。
Public Class ComplexNumber {プライベートダブルRE;プライベートダブルIM; public complexNumber(){re = 0.0; im = 0.0;} public complexNumber(double re、double im){this.re = re; this.im = im; } public double getre(){return re; } public void setre(double re){this.re = re; } public double getim(){return im; } public void setim(double im){this.im = im; } public boolean equals(object other object){if(this == otherObject)return true; if(otherObject == null)falseを返します。 if(getClass()!= otherObject.getClass())falseを返します。 complexNumber other =(complexNumber)otherObject; if((re == other.re)&&(im == other.im))return true;それ以外の場合はfalseを返します。 } public string toString(){string str = ""; if(re!= 0)str += re; if(im == 0)return str; if(im <0)str += im +"i"; else str + = " +" + im + "i"; strを返します。 } public static void main(string [] args){complexNumber c1、c2; c1 = new ComplexNumber(2,3); c2 = new ComplexNumber(2、-3.4); if(c1.equals(c2)){system.out.println( "(" +c1 +")==(" +c2 +")"); } else {system.out.println( "(" +c1 +")<>(" +c2 +")"); }}}結果は(2.0 + 3.0i)<>(2.0-3.4i)です
上記は、編集者があなたにもたらすJavaの主要な継承についての簡単な議論です。誰もがwulin.comをもっとサポートすることを願っています〜