ビデオ: 【Javaプログラミング講座/オブジェクト指向 #4】継承①(継承/継承関係にあるオブジェクトの構造) ※1.5倍速での再生を推奨 2024
Javaでオブジェクト指向プログラムを書くときには、まずデータについて考えることから始めます。あなたはアカウントについて書いています。ではアカウントは何ですか?ボタンのクリックを処理するコードを作成しています。では、ボタンは何ですか?従業員に給与小切手を送るプログラムを書いています。従業員は何ですか?
この例では、従業員は名前と役職を持つ人物です。確かに、従業員は他の特徴を持っていますが、今のところ基本は固執しています。このリストのコードは、従業員であることの意味を定義します。
<! --1 - >インポート静的Java。ラング。システム。でる;パブリッククラスEmployee {プライベートString name;プライベートString jobTitle; public void setJobTitle(String jobTitleIn);}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}このメソッドは、二倍額支払った){out。 printf( "%sの順番で支払う"、名前);でる。 printf( "(%s)*** $"、jobTitle);でる。 printf( "%、.2fn"、amountPaid);}}
リスティングでは、Employeeクラスが定義されています。ここで定義した内容を使用して、定義を拡張して、より特殊な新しいクラスを作成することができます。次のリストでは、新しいクラス、つまりFullTimeEmployeeクラスを定義します。
public class FullTimeEmployee Employeesを拡張します。 {private double weeklySalary;プライベートダブルベネフィットpublic double getBenefitDeduction(){return benefitDeduction;} public double findPaymentAmount(){} {}}}}}}}}}}}}}}}}}}}また、このメソッドは、 ){return weeklySlyary-benefitDeduction;}}リスティングを見ると、FullTimeEmployeeクラスの各インスタンスにweeklySalaryとbenefitDeductionの2つのフィールドがあることがわかります。しかし、それぞれのFullTimeEmployeeインスタンスには唯一のフィールドがありますか?いいえ、そうではないです。
<! - 3 - >
最初の行は、FullTimeEmployeeクラスが既存のEmployeeクラスを拡張することを示しています。つまり、weeklySalaryとbenefitsDeductionを持つことに加えて、各FullTimeEmployeeインスタンスには、nameとjobTitleの2つのフィールドもあります。これらの2つのフィールドは、Employeeクラスの定義から来ています。これは最初のリストにあります。2番目のリストでは、魔法の言葉は
です。 1つのクラスが既存のクラスを拡張する場合、拡張するクラスは既存のクラスで定義された機能を自動的に継承します。したがって、FullTimeEmployeeクラス は、 nameフィールドとjobTitleフィールドを継承します。 FullTimeEmployeeクラスは、Employeeクラス(setName、getName、setJobTitle、getJobTitle、およびcutCheck)で宣言されているすべてのメソッドも継承します。 FullTimeEmployeeクラスは、Employeeクラスの サブクラス
です。 つまり、Employeeクラスは、FullTimeEmployeeクラスの スーパークラス
です。あなたは血の親戚の面で話すこともできます。 FullTimeEmployeeクラスはEmployeeクラスの 子 であり、EmployeeクラスはFullTimeEmployeeクラスの 親 です。 これは、FullTimeEmployeeクラスがこのリスティングのコードで定義されているかのようにほとんど(ただしあまりありません)です。このコードは偽物ですが、有益です。 インポート静的Java。ラング。システム。でる;パブリッククラスFullTimeEmployee {プライベートString name;プライベートString jobTitle;プライベートダブルweeklySalary;プライベートダブルベネフィットpublic void setJobTitle(String jobTitleIn);}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}で表されるように、二重のweeklySalaryIn){} weeklySalary = weeklySalaryIn;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}で与えられる。 - benefitDeduction;} public void cutCheck(double amountPaid){アウト。 printf( "%sの順番で支払う"、名前);でる。 printf( "(%s)*** $"、jobTitle);でる。 printf( "%、.2fn"、amountPaid);}}
このリスティングはなぜ偽のコードですか?このリスティングと以前のリスティングの継承状況との主な違いは、次のとおりです。子クラスは、親クラスのプライベートフィールドを直接参照できません。親クラスのプライベートフィールドで何かをするには、子クラスは親クラスのアクセサメソッドを呼び出さなければなりません。
2番目のリストに戻ると、setName( "Rufus")の呼び出しは合法ですが、コード名= "Rufus"は使用できません。あなたが最後のリストで読んだものすべてを信じているなら、FullTimeEmployeeクラスのコードはname = "Rufus"を実行できると思います。まあ、できません。
従業員は必要ありません。ハードドライブ上のjavaファイルを使用して、Employeeクラスを拡張するコードを記述します。必要なのは、Employeeファイルだけです。クラス。