Download presentation
Presentation is loading. Please wait.
1
مظفر بگ محمدی دانشگاه ایلام
کلاسهای انتزاعی مظفر بگ محمدی دانشگاه ایلام
2
کلاسهای انتزاعی public class Employee { private String name; private Date hireDate; // constructors, accessors, mutators, equals, toString } public class HourlyEmployee extends Employee private double wageRate; private double hours; //for the month public double getPay( ) {return wageRate * hours;} public class SalariedEmployee extends Employee private double salary; //annual public double getPay() { return salary / 12; }
3
متد samePay فرض کنید می خواهیم بدانیم که آیا دریافتی دو کارمند یکسان است؟ لذا متد samePay را به کلاس اضافه Employee می کنیم. این متد باید بتواند مقدار دریافتی هر دو نوع کارمندی را با هم مقایسه کند. public boolean samePay(Employee other) { return(this.getPay() == other.getPay()); }
4
مشکلات samePay متد samePay متد getPayرا صدا می زند. راه حل:
متد getPay در کلاسهای SalariedEmployees و HourlyEmployeesتعریف شده است. اما در کلاس عمومی Employeeتعریف نشده است. چون تعریف این متد در کلاس Employee بی معنی است. راه حل: هر کلاسی که از Employee مشتق می شود، باید متد samePay را خودش پیاده کند. جاوا این کار را از طریق متدهای انتزاعی انجام می دهد.
5
متدهای انتزاعی متد انتزاعی مثل یک ظرف است که محتوای آن در کلاسهای مشتق شده مشخص می شود. پیاده سازی متد را به تعویق می اندازد. اما امضای آن کامل است و کلمه ی abstract به آن اضافه شده است. نمی تواند private باشد. بدنه ندارد و به جای بدنه یک ; قرار می گیرد. public abstract double getPay(); public abstract void doIt(int count); بدنه ی متد در کلاسهای مشتق شده تعریف خواهد شد. کلاسی که یک یا چند متد انتزاعی داشته باشد، یک کلاس انتزاعی است. 5
6
کلاس انتزاعی کلاسی که یک یا چند متد انتزاعی داشته باشد، یک کلاس انتزاعی است. کلاس انتزاعی باید در سرآیند کلاس از کلمه ی کلیدی abstract استفاده کند. public abstract class Employee { private instanceVariables; . . . public abstract double getPay(); } 6
7
کلاس انتزاعی یک کلاس انتزاعی می تواند هر تعداد متد انتزاعی و/یا متد کاملاً تعریف شده داشته باشد. اگر کلاس مشتق شده از یک کلاس انتزاعی، تمام متدهای انتزاعی را تعریف نکند یا یک یا چند متد انتزاعی به تعریف کلاس اضافه کند: کلاس مشتق شده نیز انتزاعی است و باید از abstract در سرآیند خود استفاده کند. کلاسی که متد انتزاعی نداشته باشد، یک کلاس concrete است. 7
8
کلاس انتزاعی Employee public abstract class Employee {
private String name; private Date hireDate; public abstract double getPay( ); // constructors, accessors, mutators, equals, toString public boolean samePay(Employee other) return(this.getPay() == other.getPay()); }
9
شما نمی توانید از کلاسهای انتزاعی شی ایجاد کنید.
کلاس انتزاعی برای تولید کلاسهای خصوصی تر استفاده می شود. اگر چه توصیف کلاس کارمند بصورت عمومی امکان پذیر است، اما در واقعیت هر کارمند باید حقوق ثابت یا ساعتی داشته باشد. نمی توان از جزء سازنده ی کلاس انتزاعی برای ایجاد یک شی انتزاعی استفاده کرد. اما کلاس مشتق شده می تواند جزء سازنده ی کلاس انتزاعی را (بصورت صریح یا ضمنی) از طریق super فراخوانی کند. 9
10
کلاس انتزاعی یک نوع است اگر چه نمی توانید از کلاسهای انتزاعی برای ایجاد شی استفاده کنید، اما می توان پارامترهایی از نوع کلاس انتزاعی داشت. بعداً می توان یک شی از نوع یکی از کلاسهای مشتق شده را به عنوان آرگومان به متد ارسال کرد. همچنین می توان یک متغییر از نوع کلاس انتزاعی تعریف نمود و از آن برای نامگذاری کلاسهای concrete مشتق شده استفاده کرد. 10
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.