בתכנות מונחה עצמים, הפשטה מוגדרת כהסתרת הפרטים המיותרים (הטמעה) מהמשתמש והתמקדות בפרטים חיוניים (פונקציונליות). זה מגביר את היעילות ובכך מפחית את המורכבות.
ב-Java, ניתן להשיג הפשטה באמצעות שיעורים מופשטים ושיטות. במדריך זה נלמד על שיטות מופשטות והשימוש בהן ב-Java.
שיעור מופשט
מחלקה מוכרזת אבסטרקטית באמצעות ה- תַקצִיר מילת מפתח. זה יכול להיות אפס או יותר שיטות מופשטות ולא מופשטות. עלינו להרחיב את המחלקה המופשטת וליישם את השיטות שלה. אי אפשר ליצור את זה באינסטציה.
השחקנית רובינא דילאיק
תחביר למחלקה מופשטת:
abstract class class_name { //abstract or non-abstract methods }
הערה: מחלקה מופשטת עשויה להכיל שיטות מופשטות או לא.
שיטה מופשטת
שיטה המוצהרת באמצעות ה תַקצִיר מילת מפתח בתוך מחלקה מופשטת ואין לה הגדרה (יישום) נקראת שיטה מופשטת.
כאשר אנו צריכים רק את הצהרת השיטה במחלקת על, ניתן להשיג זאת על ידי הכרזה על המתודות כתקצירים.
שיטה מופשטת נקראת גם אחריות תת-מחלקה מכיוון שאין לה את היישום במחלקת העל. לכן תת-מחלקה חייבת לעקוף אותה כדי לספק את הגדרת השיטה.
תחביר לשיטה מופשטת:
abstract return_type method_name( [ argument-list ] );
כאן, למתודה המופשטת אין גוף שיטה. יכול להיות שיש לו אפס או יותר ארגומנטים.
נקודות לזכור
הנקודות הבאות הם הכללים החשובים לשיטה מופשטת ב-Java:
- למתודה מופשטת אין גוף (יישום), יש לה רק חתימת שיטה (הצהרה). המחלקה שמרחיבה את המחלקה המופשטת מיישמת את השיטות המופשטות.
- אם מחלקה לא מופשטת (קונקרטית) מרחיבה מחלקה מופשטת, אז המחלקה חייבת ליישם את כל השיטות המופשטות של אותה מחלקה מופשטת. אם לא, יש להכריז גם על המחלקה הקונקרטית כמופשטת.
- מכיוון שלשיטות המופשטות יש רק את החתימה, היא צריכה להיות נקודה-פסיק (;) בסוף.
- להלן שונים שילובים לא חוקיים של מתקנים אחרים לשיטות ביחס ל תַקצִיר מַתקֵן:
- סופי
- יליד מופשט
- מופשט מסונכרן
- סטטי מופשט
- מופשט פרטי
- מופשט strictfp
- אם מחלקה מכילה מתודה מופשטת היא צריכה להיות מופשטת ולהיפך אינו נכון.
דוגמה לשיטה מופשטת ב-Java
דוגמה 1:
בדוגמה הבאה, נלמד כיצד מושגת הפשטה באמצעות מחלקות מופשטות ושיטות מופשטות.
AbstractMethodEx1.java
איך להתאים אוזניות של Beats
// abstract class abstract class Multiply { // abstract methods // sub class must implement these methods public abstract int MultiplyTwo (int n1, int n2); public abstract int MultiplyThree (int n1, int n2, int n3); // regular method with body public void show() { System.out.println ('Method of abstract class Multiply'); } } // Regular class extends abstract class class AbstractMethodEx1 extends Multiply { // if the abstract methods are not implemented, compiler will give an error public int MultiplyTwo (int num1, int num2) { return num1 * num2; } public int MultiplyThree (int num1, int num2, int num3) { return num1 * num2 * num3; } // main method public static void main (String args[]) { Multiply obj = new AbstractMethodEx1(); System.out.println ('Multiplication of 2 numbers: ' + obj.MultiplyTwo (10, 50)); System.out.println ('Multiplication of 3 numbers: ' + obj.MultiplyThree (5, 8, 10)); obj.show(); } }
תְפוּקָה:
דוגמה 2:
כברירת מחדל, כל השיטות של ממשק הן ציבוריות ומופשטות. ממשק לא יכול להכיל שיטות קונקרטיות כלומר שיטות רגילות עם גוף.
AbstractMethodEx2.java
// interface interface SquareCube { // abstract methods public abstract int squareNum (int n); // it not necessary to add public and abstract keywords // as the methods in interface are public abstract by default int cubeNum (int n); // regular methods are not allowed in an interface // if we uncomment this method, compiler will give an error /*public void disp() { System.out.println ('I will give error if u uncomment me'); } */ } public class AbstractMethodEx2 implements SquareCube { // defining the abstract methods of interface public int squareNum (int num) { return num * num; } public int cubeNum (int num) { return num * num * num; } // main method public static void main(String args[]){ SquareCube obj = new AbstractMethodEx2(); System.out.println('Square of number is: ' + obj.squareNum (7) ); System.out.println('Cube of number is: ' + obj.cubeNum (7)); } }
תְפוּקָה:
בדרך זו, למדנו על השיטה המופשטת והטמעתה בג'אווה.
דוגמאות nfa