جاوا
جلسه ۳۹: کلاس ها و متدهای انتزاعی در جاوا

abstract class ClassName {
// Implementation here
}
پیاده سازی
انتزاع در جلسه قبل بحث شد. کلاسهای انتزاعی برای دستیابی به انتزاع در جاوا استفاده می شوند.یک سلسله مراتب از حیوانات را با استفاده از جاوا می توان به صورت زیر ایجاد کنید:- یک کلاس انتزاعی پایه به نام
Animal
(حیوان) - کلاس مشتق شده ای به نام
Dog
- کلاس مشتق شده ای به نام
Cat
- کلاس مشتق شده ای به نام
Sheep
همه این حیوانات صداهای مختلفی ایجاد می کنند:
Animal
، تمام صفات مشترک حیوانات باید پیاده سازی شود. سایر صفات اختصاصی مربوط به یک حیوان خاص باید در کلاس مشتق شده مربوطه پیاده سازی شود. کلاسهای انتزاعی عملکرد دقیقاً مشابهی را در اختیار برنامه نویس قرار می دهند. این مثال را در زیر پیاده سازی می کنیم:abstract class Animal {
public abstract void makeSound();
public void move() {
System.out.println(getClass().getSimpleName()+" is moving");
//getClass().getSimpleName() is an inbuilt functionality of Java
//to get the class name from which the method is being called
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof Woof...");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow Meow...");
}
}
class Sheep extends Animal {
@Override
public void makeSound() {
System.out.println("Baa Baa..");
}
}
class Main {
public static void main(String args[]) {
// Creating the objects
Animal dog = new Dog();
Animal cat = new Cat();
Animal sheep = new Sheep();
dog.makeSound(); // Calling methods from Dog
dog.move();
cat.makeSound(); // Calling methods from Cat
cat.move();
sheep.makeSound(); // Calling methods from Sheep
sheep.move();
}
}
از مثال بالا می توان فهمید که یک کلاس انتزاعی چقدر می تواند مفید باشد:- همه حیوانات می توانند حرکت کنند و این یک ویژگی مشترک است بنابراین متد
()move
در کلاسAnimal
پیاده سازی می شود و همه کلاس های مشتق شده می توانند بدون هیچ گونه پیاده سازی در درون خود از این متد استفاده کنند. - حیوانات صداهای مختلفی تولید می کنند و به همین دلیل یک متد انتزاعی در کلاس
Animal
اعلام می شود ، بنابراین همه کلاس های مشتق شده باید این متد را به روش های خاص خودOverride@
کنند.
public abstract void methodName(parameter(s));
اعلامیه متد انتزاعی دارای موارد زیر است:- سطح دسترسی
- کلمه کلیدی
abstract
- نوع برگشتی
- نام متد
- پارامتر (ها) که باید به متد ارسال شوند
- یک نقطه ویرگول
(;)
برای پایان دادن به اعلامیه متد
کلاس انتزاعی
کلاس انتزاعی ، کلاسی است که با استفاده از کلمه کلیدی abstract
اعلام می شود.
قوانینی که باید رعایت شود
- یک کلاس انتزاعی قابل نمونه سازی نیست یعنی نمی توان یک شی از کلاس انتزاعی ایجاد کرد.
- یک کلاس انتزاعی می تواند دارای اعلامیه متد (های) انتزاعی باشد اما داشتن آن هیچ اجباری نیست.
- متدهای غیر انتزاعی یا عادی را می توان در یک کلاس انتزاعی پیاده سازی کرد.
- برای استفاده از یک کلاس انتزاعی باید کلاس غیر انتزاعی مشتق شده ای از آن داشته باشیم.
- کلاسی (غیر انتزاعی) که از کلاس انتزاعی مشتق شده است باید تمام متدهای انتزاعی اعلام شده در کلاس انتزاعی والد را پیاده سازی کند.
- یک کلاس انتزاعی می تواند هر چیزی را همانند یک کلاس معمولی جاوا داشته باشد ، مثلاً سازنده ، متغیرهای استاتیک و متدها و… علاوه بر آنها می تواند متدهای انتزاعی نیز داشته باشد.
نحوه اعلام
از لحاظ نحوی (syntax) ، اعلام کلاس انتزاعی در جاوا به شرح زیر است:abstract class ClassName {
// Implementation here
}
پیاده سازی
انتزاع در جلسه قبل بحث شد. کلاسهای انتزاعی برای دستیابی به انتزاع در جاوا استفاده می شوند.یک سلسله مراتب از حیوانات را با استفاده از جاوا می توان به صورت زیر ایجاد کنید:- یک کلاس انتزاعی پایه به نام
Animal
(حیوان) - کلاس مشتق شده ای به نام
Dog
- کلاس مشتق شده ای به نام
Cat
- کلاس مشتق شده ای به نام
Sheep
همه این حیوانات صداهای مختلفی ایجاد می کنند:
Animal
، تمام صفات مشترک حیوانات باید پیاده سازی شود. سایر صفات اختصاصی مربوط به یک حیوان خاص باید در کلاس مشتق شده مربوطه پیاده سازی شود. کلاسهای انتزاعی عملکرد دقیقاً مشابهی را در اختیار برنامه نویس قرار می دهند. این مثال را در زیر پیاده سازی می کنیم:abstract class Animal {
public abstract void makeSound();
public void move() {
System.out.println(getClass().getSimpleName()+" is moving");
//getClass().getSimpleName() is an inbuilt functionality of Java
//to get the class name from which the method is being called
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof Woof...");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow Meow...");
}
}
class Sheep extends Animal {
@Override
public void makeSound() {
System.out.println("Baa Baa..");
}
}
class Main {
public static void main(String args[]) {
// Creating the objects
Animal dog = new Dog();
Animal cat = new Cat();
Animal sheep = new Sheep();
dog.makeSound(); // Calling methods from Dog
dog.move();
cat.makeSound(); // Calling methods from Cat
cat.move();
sheep.makeSound(); // Calling methods from Sheep
sheep.move();
}
}
از مثال بالا می توان فهمید که یک کلاس انتزاعی چقدر می تواند مفید باشد:- همه حیوانات می توانند حرکت کنند و این یک ویژگی مشترک است بنابراین متد
()move
در کلاسAnimal
پیاده سازی می شود و همه کلاس های مشتق شده می توانند بدون هیچ گونه پیاده سازی در درون خود از این متد استفاده کنند. - حیوانات صداهای مختلفی تولید می کنند و به همین دلیل یک متد انتزاعی در کلاس
Animal
اعلام می شود ، بنابراین همه کلاس های مشتق شده باید این متد را به روش های خاص خودOverride@
کنند.
- متدهای انتزاعی
- قوانینی که باید رعایت شوند
- نحوه اعلام
- کلاس انتزاعی
- قوانینی که باید رعایت شوند
- نحوه اعلام
- پیاده سازی
متدهای انتزاعی
متدی که کلمه کلیدی abstract
در اعلان خود دارد به عنوان یک متد انتزاعی شناخته می شود.
قوانینی که باید رعایت شود
- بر خلاف متدهای معمولی در جاوا ، یک متد انتزاعی دارای بدنه نیست ، یعنی فقط دارای یک تعریف یا امضای متد در داخل یک کلاس انتزاعی یا یک اینترفیس است (در این موارد بعداً بیشتر توضیح می دهیم).
- یک متد انتزاعی فقط می تواند در داخل یک کلاس انتزاعی یا یک اینترفیس اعلام شود.
- به عبارت دیگر ، هر کلاسی که متد انتزاعی دارد باید به صورت کلاس انتزاعی تعریف شود چون کلاس های غیر انتزاعی نمی توانند متد انتزاعی داشته باشند.
- یک متد انتزاعی را نمی توان با دسترسی خصوصی (private) اعلام کرد زیرا باید در کلاس دیگری پیاده سازی شود.
نحوه اعلام
حال به بخش نحو (syntax) می رویم ، از لحاظ نحوی شکل کلی اعلامیه یک متد انتزاعی به شرح زیر است:public abstract void methodName(parameter(s));
اعلامیه متد انتزاعی دارای موارد زیر است:- سطح دسترسی
- کلمه کلیدی
abstract
- نوع برگشتی
- نام متد
- پارامتر (ها) که باید به متد ارسال شوند
- یک نقطه ویرگول
(;)
برای پایان دادن به اعلامیه متد
کلاس انتزاعی
کلاس انتزاعی ، کلاسی است که با استفاده از کلمه کلیدی abstract
اعلام می شود.
قوانینی که باید رعایت شود
- یک کلاس انتزاعی قابل نمونه سازی نیست یعنی نمی توان یک شی از کلاس انتزاعی ایجاد کرد.
- یک کلاس انتزاعی می تواند دارای اعلامیه متد (های) انتزاعی باشد اما داشتن آن هیچ اجباری نیست.
- متدهای غیر انتزاعی یا عادی را می توان در یک کلاس انتزاعی پیاده سازی کرد.
- برای استفاده از یک کلاس انتزاعی باید کلاس غیر انتزاعی مشتق شده ای از آن داشته باشیم.
- کلاسی (غیر انتزاعی) که از کلاس انتزاعی مشتق شده است باید تمام متدهای انتزاعی اعلام شده در کلاس انتزاعی والد را پیاده سازی کند.
- یک کلاس انتزاعی می تواند هر چیزی را همانند یک کلاس معمولی جاوا داشته باشد ، مثلاً سازنده ، متغیرهای استاتیک و متدها و… علاوه بر آنها می تواند متدهای انتزاعی نیز داشته باشد.
نحوه اعلام
از لحاظ نحوی (syntax) ، اعلام کلاس انتزاعی در جاوا به شرح زیر است:abstract class ClassName {
// Implementation here
}
پیاده سازی
انتزاع در جلسه قبل بحث شد. کلاسهای انتزاعی برای دستیابی به انتزاع در جاوا استفاده می شوند.یک سلسله مراتب از حیوانات را با استفاده از جاوا می توان به صورت زیر ایجاد کنید:- یک کلاس انتزاعی پایه به نام
Animal
(حیوان) - کلاس مشتق شده ای به نام
Dog
- کلاس مشتق شده ای به نام
Cat
- کلاس مشتق شده ای به نام
Sheep
همه این حیوانات صداهای مختلفی ایجاد می کنند:
Animal
، تمام صفات مشترک حیوانات باید پیاده سازی شود. سایر صفات اختصاصی مربوط به یک حیوان خاص باید در کلاس مشتق شده مربوطه پیاده سازی شود. کلاسهای انتزاعی عملکرد دقیقاً مشابهی را در اختیار برنامه نویس قرار می دهند. این مثال را در زیر پیاده سازی می کنیم:abstract class Animal {
public abstract void makeSound();
public void move() {
System.out.println(getClass().getSimpleName()+" is moving");
//getClass().getSimpleName() is an inbuilt functionality of Java
//to get the class name from which the method is being called
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof Woof...");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow Meow...");
}
}
class Sheep extends Animal {
@Override
public void makeSound() {
System.out.println("Baa Baa..");
}
}
class Main {
public static void main(String args[]) {
// Creating the objects
Animal dog = new Dog();
Animal cat = new Cat();
Animal sheep = new Sheep();
dog.makeSound(); // Calling methods from Dog
dog.move();
cat.makeSound(); // Calling methods from Cat
cat.move();
sheep.makeSound(); // Calling methods from Sheep
sheep.move();
}
}
از مثال بالا می توان فهمید که یک کلاس انتزاعی چقدر می تواند مفید باشد:- همه حیوانات می توانند حرکت کنند و این یک ویژگی مشترک است بنابراین متد
()move
در کلاسAnimal
پیاده سازی می شود و همه کلاس های مشتق شده می توانند بدون هیچ گونه پیاده سازی در درون خود از این متد استفاده کنند. - حیوانات صداهای مختلفی تولید می کنند و به همین دلیل یک متد انتزاعی در کلاس
Animal
اعلام می شود ، بنابراین همه کلاس های مشتق شده باید این متد را به روش های خاص خودOverride@
کنند.