המחלקה המופשטת ב-Java דומה לממשק חוץ מכך שהיא יכולה להכיל ביצוע של שיטה ברירת מחדל. מחלקה מופשטת יכולה לכלול שיטה מופשטת ללא גוף ויכולה להכיל שיטות עם ביצוע גם. מילת המפתח `abstract` משמשת ליצירת מחלקה מופשטת ושיטה. מחלקה מופשטת ב-Java לא יכולה להיות מופעלת. מחלקה מופשטת משמשת בעיקר כדי לספק בסיס לתת-מחלקות להרחבה וליישום השיטות המופשטות ולדרוס או להשתמש בשיטות המיושמות במחלקה המופשטת.
מחלקת מחלקה מופשטת ב-Java
כאן דוגמה פשוטה למחלקת מחלקה מופשטת ב-Java.
package com.journaldev.design;
//מחלקה מופשטת
public abstract class Person {
private String name;
private String gender;
public Person(String nm, String gen){
this.name=nm;
this.gender=gen;
}
//שיטת מחלקה מופשטת
public abstract void work();
@Override
public String toString(){
return "Name="+this.name+"::Gender="+this.gender;
}
public void changeName(String newName) {
this.name = newName;
}
}
שימו לב ש־work()
היא שיטת מחלקה מופשטת ואין לה גוף. כאן דוגמה למחלקה מופשטת מורחבת המרחיבה מחלקה מופשטת ב-Java.
package com.journaldev.design;
public class Employee extends Person {
private int empId;
public Employee(String nm, String gen, int id) {
super(nm, gen);
this.empId=id;
}
@Override
public void work() {
if(empId == 0){
System.out.println("Not working");
}else{
System.out.println("Working as employee!!");
}
}
public static void main(String args[]){
//תכנות במונחי מחלקות מופשטות
Person student = new Employee("Dove","Female",0);
Person employee = new Employee("Pankaj","Male",123);
student.work();
employee.work();
//שימוש בשיטה שמיושמת במחלקה מופשטת - ירושה
employee.changeName("Pankaj Kumar");
System.out.println(employee.toString());
}
}
שימו לב שכיתה משנה, Employee, מורישה את התכונות והשיטות של מערכת גורם, Person, באמצעות ירושה ב-Java. גם שימו לב לשימוש באוברייד אנוטציה במחלקת Employee. קראו עוד כדי למה תמיד כדאי להשתמש באוברייד אנוטציה כאשר משתמשים בשיטת התעלמות.
נקודות חשובות על מחלקת מופשטת ב-Java
abstract
מילת המפתח משמשת ליצירת מחלקה מופשטת ב-Java.- מחלקה מופשטת ב-Java לא יכולה להיות מופעת.
- ניתן להשתמש במילת המפתח
abstract
כדי ליצור שיטה מופשטת, שיטה מופשטת אינה מכילה גוף. - אם למחלקה יש שיטות מופשטות, אז גם המחלקה צריכה להיות מופשטת באמצעות מילת המפתח abstract, אחרת לא יסתיים ההרכב.
- אין צורך שמחלקה מופשטת תכיל שיטה מופשטת. ניתן לסמן מחלקה כמופשטת גם אם היא לא מצהירה על שום שיטה מופשטת.
- אם למחלקה מופשטת אין כל יישום של שיטה, נכון יותר להשתמש בממשק מכיוון ש-Java לא תומכת בתורת הירושה מרובה של מחלקות.
- כיתת המשנה של מחלקה מופשטת ב-Java חייבת לממש את כל השיטות המופשטות אלא אם כן הכיתה המשנה היא גם מחלקה מופשטת.
- כל השיטות בממשק הן מופשטות משמעותית אלא אם ורק אם שיטות הממשק הן סטטיות או ברירתיות. שיטות סטטיות ושיטות ברירתיות בממשקים נוספו ב־Java 8, לפרטים נוספים ראה את שינויי ממשק ב־Java 8.
- מחלקה מופשטת ב־Java יכולה ליישם ממשקים אפילו בלי לספק את יישום שיטות הממשק.
- מחלקה מופשטת ב־Java משמשת לספק יישום שיטה משותף לכל תתי המחלקות או לספק יישום ברירתי.
- ניתן להריץ מחלקה מופשטת ב־Java כמו כל מחלקה אחרת אם יש לה את השיטה
main()
.
וזו כל המידע לגבי מחלקה מופשטת ב־Java. אם פספסתי משהו חשוב, אנא יידע אותנו דרך ההערות.
Source:
https://www.digitalocean.com/community/tutorials/abstract-class-in-java