ما هي فئة مجردة وطريقة مجردة في جافا؟ متى يجب علي استخدامه؟ البرنامج التعليمي مرفق
نشرت: 2019-09-12
منذ يومين ، كتبت مقالًا عن أساسيات Java الأساسية حول ما هي الواجهة في Java وكيف يتم استخدامها؟ يرتبط هذا البرنامج التعليمي أيضًا بأساسيات Java الأساسية " Abstract Class and Abstract Method
".
ما هي فئة مجردة؟
لنبدأ في فهم فئة الملخص أولاً ثم ننتقل إلى المثال.
- فئة مجردة هي فئة تم إعلانها
abstract
- لا يمكن إنشاء مثيل لفئات الملخص
- يمكن تصنيف فئات الملخصات إلى فئات فرعية
- قد تتضمن أو لا تتضمن طرقًا مجردة
- عندما يتم تصنيف فئة مجردة إلى فئة
subclassed
، توفر الفئة الفرعية عادةً تطبيقات لجميع الطرق المجردة في صنفها الأصلي - إذا كانت الفئة الفرعية لا توفر تطبيقات ، فيجب أيضًا إعلان الفئة الفرعية بأنها
abstract
.
هذا basic Java Interview Question
. ربما يكون 1 st Java Interview Question
الذي تحصل عليه أثناء المقابلة.
هل يمكنني تحديد فئة مجردة دون إضافة طريقة مجردة؟
بكل تأكيد نعم. إن إعلان ملخص للفصل يعني فقط أنك لا تسمح بتكوين مثيل له من تلقاء نفسه. لا يمكنك الحصول على طريقة مجردة في فئة غير مجردة.
ما هي الطريقة المجردة؟
-
abstract method
هي طريقة تم التصريح عنها بدون تنفيذ. - انها مجرد طريقة التوقيع.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package crunchify . com . tutorial ; /** * @author Crunchify.com * Simple Abstract Class and Method Example with live result * */ public abstract class CrunchifyExam { public enum ExamStatus { PASSED , FAILED } private String examTime ; private ExamStatus status ; public CrunchifyExam ( String examTime , ExamStatus status ) { this . examTime = examTime ; this . status = status ; } public String getExamTime ( ) { return examTime ; } public void setExamTime ( String examTime ) { this . examTime = examTime ; } public void setExamStatus ( ExamStatus status ) { this . status = status ; } public ExamStatus getExamStatus ( ) { return status ; } abstract public void checkResult ( ) ; } |
لنبدأ بمثال. وصف المشكلة:
- قم بإنشاء فئة
CrunchifyExam.java
، والتي لها طريقة مجردة واحدة تسمىcheckResult()
- قم بإنشاء فئة
Crunchify1stSchoolExamResult.java
، والتي تمتد إلى فئة AbstractCrunchifyExam.java
- قم بإنشاء فئة
Crunchify2ndSchoolExamResult.java
، والتي تمتد إلى فئة AbstractCrunchifyExam.java
- الآن يجب على كلا الفئتين المذكورتين أعلاه توفير تنفيذ لطريقة checkResult ()
- قد يكون لكلتا المدرستين
procedure
مختلفة أوnumber of checks
لمعرفة ما إذا كان المستخدم قدPASSED or FAILED
، فلديهما الحرية في تطبيقcheckResult()
الخاص بهما
بمجرد تمديد فئة CrunchifyExam
في Crunchify1stSchoolExamResult.java
- سيطالبك Eclipse بتنفيذ طرق Abstract المذكورة في CrunchifyExam.java

Crunchify1 شارع SchoolExamResult.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package crunchify . com . tutorial ; /** * @author Crunchify.com */ public class Crunchify1stSchoolExamResult extends CrunchifyExam { public Crunchify1stSchoolExamResult ( String examTime , ExamStatus status ) { super ( examTime , status ) ; // TODO Auto-generated constructor stub } @Override public void checkResult ( ) { String studentName = "Crunchify1" ; String studentResult = "85%" ; // School NO-1 will provide all their formula to find if user is passed or failed. // After detailed calculation let's say student's grade is "PASSED". System . out . println ( "Hey.. this is user " + studentName + " with grade " + studentResult + " - " + getExamStatus ( ) + ", ExamTime: " + getExamTime ( ) ) ; } } |
Crunchify2 الثانية SchoolExamResult.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
package crunchify . com . tutorial ; import java . text . DateFormat ; import java . text . SimpleDateFormat ; import java . util . Date ; /** * @author Crunchify.com */ public class Crunchify2ndSchoolExamResult extends CrunchifyExam { public Crunchify2ndSchoolExamResult ( String examTime , ExamStatus status ) { super ( examTime , status ) ; } @Override public void checkResult ( ) { String studentName = "Crunchify2" ; String studentResult = "45%" ; // School NO-2 will provide all their formula to find if user is passed or failed. // After detailed calculation let's say student's grade is "FAILED". log ( "Hey.. this is user " + studentName + " with grade " + studentResult + " - " + getExamStatus ( ) + ", ExamTime: " + getExamTime ( ) ) ; } public static void main ( String args [ ] ) { DateFormat dateFormat = new SimpleDateFormat ( "yyyy/MM/dd HH:mm:ss" ) ; // 1st School's checkResult() Date date = new Date ( ) ; String examTime = dateFormat . format ( date ) ; log ( "Initializing 1st School object at time " + examTime ) ; // We are setting up time and Result for 1st School Crunchify1stSchoolExamResult object = new Crunchify1stSchoolExamResult ( examTime , ExamStatus . PASSED ) ; object . checkResult ( ) ; // Let's wait 5 seconds wait to see time difference in console log try { Thread . sleep ( 5000 ) ; } catch ( InterruptedException e ) { e . printStackTrace ( ) ; } // 2nd School's checkResult() date = new Date ( ) ; examTime = dateFormat . format ( date ) ; log ( "\nInitializing 2nd School object at time " + examTime ) ; // We are setting up time and Result for 2nd School Crunchify2ndSchoolExamResult object2 = new Crunchify2ndSchoolExamResult ( examTime , ExamStatus . FAILED ) ; object2 . checkResult ( ) ; } // Simple log method private static void log ( String value ) { System . out . println ( value ) ; } } |
نتيجة وحدة التحكم في الكسوف:
فقط انقر بزر الماوس الأيمن على Crunchify2ndSchoolExamResult.java
وقم بتشغيله كتطبيق Java Application
لرؤية النتيجة أدناه.

1 2 3 4 5 |
Initializing 1st School object at time 2016 / 11 / 30 14 : 24 : 37 Hey . . this is user Crunchify1 with grade 85 % - PASSED ExamTime : 2016 / 11 / 30 14 : 24 : 37 Initializing 2nd School object at time 2016 / 11 / 30 14 : 24 : 42 Hey . . this is user Crunchify2 with grade 45 % - FAILED ExamTime : 2016 / 11 / 30 14 : 24 : 42 |
الآن قد يكون لديك سؤال
لماذا لا يمكنني استخدام الواجهة هنا بدلاً من استخدام Abstract Method
Class
واستخدام CrunchifyExam كواجهة؟
حسنًا - Sure you could
ذلك - ولكنك ستحتاج أيضًا إلى تنفيذ getExamTime
() و setExamTime
() و getExamTime
() و setExamTime
().
باستخدام الفئات المجردة ، يمكنك أن ترث تنفيذ طرق أخرى (غير مجردة). لا يمكنك القيام بذلك باستخدام الواجهات - cannot provide
أي عمليات تنفيذ للطريقة.
هل من الممكن إنشاء فئة مجردة ونهائية في Java؟
- الملخص والنهائي هما المفهومان المتبادلان.
- إذن الإجابة هي لا ، لا يمكننا جعل فئة مجردة أو طريقة نهائية في Java.
- الدرجة النهائية هي فئة كاملة ولا يمكن تمديدها أكثر.
- يُطلق على فئة الملخص اسم فئة غير مكتملة ولا يمكن تمديدها إلا بواسطة فئة محددة أخرى وعليك تنفيذ جميع الطرق المجردة.
- أيضًا ، لا توجد طريقة ولا يمكن الحصول على طريقة مجردة في الفصل الدراسي النهائي.
هل من الممكن أن ترث من عدة فئات مجردة في جافا؟
- لا تدعم Java الوراثة المتعددة.
- في جافا ، يمكننا فقط تمديد فصل دراسي واحد.
- في Java يمكننا تنفيذ واجهات من عدة مصادر.