Abstract Class - Interface
Abstract Class
از این کلاس نمیتوان نمونهسازی انجام داد (مثلا نوشت AbstractClass a = new AbstractClass();
این اشتباه است.). تنها برای این است که از آن به ارث برند.
متدهای درونش می توانند با بدنه یا بدون بدنه باشند. متدهای بدون بدنه را abstract method میگویند. از آن سو اگر کلاسی ابسترکت نباشد اجازه داشتن متد ابسترکت ندارد.
نحوه ایجاد یک کلاس ابسترکت:
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(); // یک متد ابسترکت public void changeName(String newName) { this.name = newName; } }
بهکارگیری آن:
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("Soqra","Female",0); // Person employee = new Employee("Akbar","Male",123); student.work(); employee.work(); } }
---------------------------
اینترفیس چیست؟
در اینترفیس ما تنها متدهای ابستکرت و دیفالت و استاتیک داریم.
از روی اینترفیس هم نمیتوان زیرکلاس ساخت.
در اینترفیس تمام فیلدها باید سه ویژگی داشته باشند: static - final - public
تمام متدها به صورت ناگفته پابلیک هستند (نیازی به نوشتن پابلیک نیست).
کاربرد اینترفیس:
- کاربردش این است که ایمپلیمنتیشن چندتایی (وراثت چندگانه) را امکان پذیر می سازد.
- کاربرد دیگرش این است که مانند یک قرارداد است که رهبران تیم برنامهنویسی به برنامهنویسها این استانداردها و قراردادها را میدهند تا از روی آنها کار کنند. به عبارت دیگر: اینترفیس این امکان را در اختیارمان میگذارد تا توسعهٔ کلاسها هرگز به صورت سلیقهای صورت نگیرد. چون مجبور هستیم حتما توابع داخل اینترفیس را به همان صورت که گفته شده اورراید کنیم.
باید حتما تمامی متدهای اینترفیس در کلاسی که آن را ایمپلیمنت کرده پیاده سازی شوند.
نمونه بهکارگیری:
interface printable{ void print(); } class A6 implements printable{ public void print(){System.out.println("Hello");} public static void main(String args[]){ A6 obj = new A6(); obj.print(); } }
مانند کلاس ابسترکت به کارگیری اینگونه هم میتواند باشد:
MyInterface a = new MyClassImplementingInterface();
تفاوت اینترفیس و کلاس ابسترکت:
- کلاس ابسترکت هم متد ابسترکت دارد و هم غیر ابسترکت. ولی در اینترفیس همه متدها ابسترکت (بیبدنه) هستند و نیازمند پر شدن توسط کلاسی که آن را ایمپلیمنت میکند.
- در کلاس ابسترکت انواع مختلف فیلدها و متدها را میتوانیم داشته باشیم. ولی در اینترفیس تنها باید استاتیک فاینال پابلیک داشته باشیم.
- در زمان بهکارگیری کلاس ابسترکت از کلیدواژه extends استفاده میشود ولی در زمان بهکارگیری اینترفیس از کلیدواژه implements استفاده میشود.