المفهوم: الميراث يعني أن تعريف الفصل يمكن أن يعتمد على فئة أخرى موجودة ، أي أن الفئة الفرعية ترث فئة الأصل ، وبالتالي تحقيق إعادة استخدام رمز الفئة الأصل. العلاقة بين فئتين: لدى فئة الوالدين عمومًا خصائص المشتركة في كل فئة فرعية ، في حين أن الفئة الفرعية يمكن أن تضيف بعض الأساليب المخصصة. الميراث الطبقي متعدّث ، أي أن الفئات الفرعية يمكن أن تستمر في استخلاص الفئات الفرعية ، ومفهوم الفصل الموجود في الطابق العلوي أكثر تجريدًا ، ومفهوم الفئات الموجودة في الطابق السفلي أكثر واقعية.
1. تحديد الفئات الفرعية:
تنسيق بناء الجملة
[Modifier] اسم الفئة الفرعية الفئة يمتد اسم الفئة الأصل {
الفئة الفرعية
}
المعدل: الافتراضي المحمي الخاص بالخاص
جسم الفئة الفرعية هو محتوى فريد جديد تضاف إليه فئة فرعية يعتمد على ورث محتوى الفئة الأصل. يمكن أن تشمل متغيرات الأعضاء ، أساليب الأعضاء ، الفصول ، واجهات ، أساليب البناء ، إلخ.
على سبيل المثال ، في شركة ، يكون الموظف موظفًا مستأجرًا من قبل الشركة ، والمدير هو موظف خاص في شركة الإدارة. ليس لهذا النوع من الموظفين الخاصين فقط سمات وطرق الموظفين العاديين ، ولكن أيضًا بعض السمات والأساليب الخاصة بهم ، مثل البدلات الخاصة.
الرمز كما يلي:
الفئة العامة characteEclass {private String Name ؛ // name private int id ؛ // رقم الشركة راتب مزدوج خاص ؛ // Salary Private String Department ؛ // Department Public SoftionEeclass () {} Public SoftioneEclass (اسم السلسلة ، INT ID ، راتب مزدوج ، قسم السلسلة) {this.name = name ؛ this.id = id ؛ هذا. this.department = قسم ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } public double getSalary () {return salary ؛ } setSalary public void (راتب مزدوج) {this.salary = الراتب ؛ } السلسلة العامة getDepartment () {Return Department ؛ } public void setDepartment (string department) {this.department = department ؛ } Override public string toString () {return "execteEClass [name =" + name + "، id =" + id + "، salary =" + salary + "، department =" + department + "]" ؛ }}هذا هو رمز فئة الموظف ، التي لديها أربع سمات ، الاسم ، الرقم ، الراتب ، القسم.
يمتد ManagerClass للطبقة العامة إلى {Private Double Doublesalary ؛ Public ManagerClass () {super () ؛} المدير العام (اسم السلسلة ، معرف int ، الراتب المزدوج ، قسم السلسلة ، doublesalary) {super (الاسم ، المعرف ، الراتب ، القسم) ؛ this.specialSalary = خاص ؛ } public double getSpecialSalary () {return Specialsalary ؛ } public void setSpecialSalary (doublesalary) {this.specialSalary = SpecialSalary ؛ } Override Public String ToString () {return super.toString () + "/SpecialSal:" + SpecialSalary ؛ }}هذه فئة فرعية ، فئة المدير ، مع سماتها الخاصة ، بدلات خاصة.
2. إمكانية الوصول إلى الفئة الفرعية لأعضاء فئة الوالدين
يمكن أن ترث الفئة الفرعية أعضاء فئة الأصل ، ولكن يتم التحكم في الوصول إلى أعضاء الفئة الأم من خلال ميزة الوصول.
تقع فئة الوالدين وفئة الطفل في نفس الحزمة: لا يمكن الوصول إلى الخاص مباشرة ، ولكن يمكننا الحصول على العضو الخاص في فئة الأصل من خلال طريقة عضو مع سمة وصول عامة.
لا يتم الوصول إلى فئة الوالدين وفئة الطفل في نفس الحزمة: لا يمكن الوصول إلى الإعدادات الافتراضية الخاصة مباشرة ، ولكن يمكننا الحصول على العضو الخاص في فئة الأصل من خلال طريقة العضو مع خصائص الوصول العامة والمحمية.
3. التحميل الزائد والكتابة عن أساليب أعضاء الفصل
عندما يكون اسم متغير العضو الجديد المحدد في الفئة الفرعية هو نفسه متغير عضو في الفئة الأصل ، فإن الفئة الفرعية تخفي متغير العضو المقابل في الفئة الأصل.
إن التحميل الزائد أو تجاوز طريقة عضو هو طريقة عضو محددة في فئة فرعية عندما يكون اسم طريقة الأعضاء المحددة في الفئة الأصل هو نفس اسم طريقة الأعضاء في الفئة الأصل.
(1) التحميل الزائد لطرق الأعضاء
في الموظف والمدير المذكور سابقًا ، يمكننا تحديد طريقة الأعضاء في فصل الموظف
public void setInfo (اسم السلسلة ، int id ، راتب مزدوج ، قسم السلسلة) {this.name = new string (name) ؛ this.id = id ؛ هذا. this.department = سلسلة جديدة (قسم) ؛ }في فئة المدير ، يمكن تعريفه على النحو التالي:
public void setInfo (اسم السلسلة ، INT ID ، راتب مزدوج ، قسم السلسلة ، عروض خاصة مزدوجة) {super (الاسم ، المعرف ، الراتب ، القسم) ؛ this.specialSalary = خاص ؛ }هذا هو الحمل الزائد لطرق الأعضاء
(2) تجاوز أساليب الأعضاء
عادة ما يكون هناك شكلان:
① في طريقة العضو المحددة بواسطة الفئة الفرعية ، اتصل أولاً بطريقة العضو المتجاوز في الفئة الأصل ، ثم إضافة بعض عبارات التشغيل.
② في أساليب الأعضاء المحددة من قبل الفئة الفرعية ، لا يتم استدعاء أساليب الأعضاء التي تجاوزتها الفئة الأصل ، ولكن مجموعة بيان هي إعادة كتابة. هذا يسمح بالتغطية الكاملة للفئة الأصل. يجب تنفيذ هذه الطريقة عندما تختلف تشغيل الفئة الفرعية تمامًا عن تشغيل كائن الفئة الأصل.
كستناء:
في فئة الكائن ، هناك طريقة عضو تساوي () تحدد ما إذا كان كائنين متساويين ، ورمزه هو:
منطقية عامة euqals (Object obj) {return (this == obj) ؛ }يمكن ملاحظة أن طريقة العضو هذه هي مقارنة ما إذا كان كائنين يشيران إلى كائن واحد في نفس الوقت.
لكننا نأمل الآن تنفيذ وظيفة تقارن ما إذا كانت محتويات كائنين من نفس النوع متساوية. لذلك لدينا فئة متعددة أدناه ، تتكون كل فئة من الجمع من جزء حقيقي وجزء وهمي. يمكن أن تقارن وظيفة التصميم ما إذا كان رقمين معقدان متساويان. الرمز كما يلي:
الطبقة العامة ComplexNumber {private double re ؛ IM مزدوج الخاص ؛ Public ComplexNumber () {re = 0.0 ؛ im = 0.0 ؛} complexnumber العامة (مزدوج 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 ؛ } Boolean Public يساوي (ObjectObject) {if (this == OtherObject) إرجاع true ؛ إذا (otheroBject == NULL) إرجاع خطأ ؛ if (getClass ()! = OtherObject.getClass ()) إرجاع خطأ ؛ ComplexNumber other = (ComplexNumber) OtherObject ؛ if ((re == other.re) && (im == other.im)) return true ؛ عودة أخرى خاطئة. } السلسلة العامة toString () {string str = "" ؛ if (re! = 0) str += re ؛ إذا (im == 0) return str ؛ إذا (im <0) str += im +"i" ؛ else str + = " +" + im + "i" ؛ إرجاع شارع } 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 +")") ؛ } آخر {system.out.println ("(" +c1 +") <> (" +c2 +")") ؛ }}}والنتيجة هي (2.0 + 3.0i) <> (2.0-3.4i)
ما سبق هو مناقشة موجزة لفهم جافا الأساسي للميراث الذي يجلبه لك المحرر. آمل أن يدعم الجميع wulin.com أكثر ~