Abstract Class និង interface

Abstract class

Abstract class: គឺ class ដែលប្រើជាមួយ keyword abstract នៅមុខ keyword class

abstract class ត្រូវតែមាន abstract method យ៉ាងតិចក៏មួយដែរ និង abstract method គឺគ្មាន body {} រឺយើងអាចហៅបានថា method signature។ ហើយចំពោះ method ធម្មតា(method concrete) មានក៏បាន អត់ក៏បាន។

abstract method យើងត្រូវដាក់ access modifier ជា public, protect រឺក៏ default ហាមដាច់ខាតប្រើជាមួយ private ពីព្រោះ private មិនអាចហៅប្រើនៅក្រៅ class បានទេ។

abstract class វាមិនអាចបង្កើត object (instantiated) បានទេ។

abstract class គឺជាលក្ខណលាក់កូដនៃ implement

public abstract class Animal{
  //default method
  public void eat(){
  }
  
  //Abstract method
 public abstract void sleep(); 

}

abstract class នៅពេលយើង inheritance ទៅ sup class មួយទៀត គឺយើងត្រូវតែ override abstractor method មកប្រើប្រាស់ជាដាច់ខាត (implement)។ ប្រសិនជាយើងមិន implement ទេនោះកូដនឹង error។

public abstract class Computer {
 // abstract method 
 public abstract void brand();
 //default method
 public void price(int price){
  System.out.println("Computer is price:"+price);
 }
}
public class Mac extends Computer {

 @Override
 public void brand() {
  // TODO Auto-generated method stub
  System.out.println("Computer is Mac pro");
 }
}

ខាងក្រោមនេះកូដលំហាត់ទាក់ទងទៅនឹង abstract class

public abstract class Animal {
 public void eat(String food) {
  System.out.println("This animal eat "+food);
  
 }
 public void sleep(int hours) {
  System.out.println("This animal sleeps "+hours+"h");
  
 }
 public abstract void makeNoice();

}
public class Cat extends Animal {
 @Override
 public void makeNoice() {
  // TODO Auto-generated method stub
  System.out.println("Meow Meow");
  
 }
}
public class Cow extends Animal {
 @Override
 public void makeNoice() {
  System.out.println("Mor Mor..");
  
 }
}
public class run {
 public static void main(String[] args) {
  Animal animal = new Cat();
  animal.eat("Fish");
  animal.sleep(5);
  animal.makeNoice();
  
  animal = new Cow();
  animal.eat("grass");
  animal.sleep(8);
  animal.makeNoice(); 
 }
}

Note: ចំពោះ super class អាចហៅ sub class (point to sub class) ប្រើបាន ប៉ុន្តែ sub class មិនអាចហៅ super class ប្រើបានទេ។ យើងបានឃើញហើយនៅឧទាហរណ៍ខាង ដោយ super class Animal បង្កើត objet ជា Cat(); បាន ប៉ុន្តែ Cat(); មិនអាចបង្កើត object Animal(); បានទេ។


Interface

interface វាស្រដៀងទៅនឹង abstract class ដែរ ប៉ុន្តែវាមិនប្រើ keyword class ទេ គឺវាប្រើ keyword interface។ interface វាគឺដើរតួនាទីជា abstract មួយរយភាគរយ។

interface គឺមានតែ static constant ឬ static field ។

Constant = final គឺជាតំលៃថេ ដែលមិនអាចកែប្រែបាន

static field គឺជារបស់ class។ ហើយចំពោះគ្រាប់ field របស់ abstract ដាច់ខាត់ត្រូវតែជា public static final ប៉ុន្តែយើងមិនដាក់ក៏បាន ដោយសារ default របស់វាចាប់យក public static final ដោយស្វាយប្រវត្តិ (automatic) ។

static គឺជាការបញ្ជាក់ថាវារបស់ class មួយនឹង ឬបញ្ជាក់ថាវាជារបស់ type មួយនឹង ។

interface គឺមានតែ signature method តែប៉ុណ្នោះ។ ហើយ method គឺដាច់ខាត់ត្រូវតែជា public abstract។

interface ដូចទៅនឹង abstract class ដែរដោយវាមិនអាចបង្កើត object បានទេ។ ការបង្កើតវាមកគឺសំរាប់ឲ្យវាដើរតួនាទីជា super class ក្នុងការកំណត់ក្បួនច្បាប់ទុកឲ្យប្រើប្រាស់ ហើយវាមិនត្រូវផ្ទេមរតកអ្វីទេ។

syntax interface

 public interface nameOfInterfaceClass{
    //abstract method
    dataType nameOfMethod(parameter);
   //abstract method
   //abstract method
}

final field គឺជា field ដែលកំណត់មកមិនអាចកែប្រែបាន

public interface Animal{
     public final int waterBolt = 100;
     public final int waterFroze = 0;  
}

នេះគឺជាបង្កើត interface នៅ eclips

abstract អាចប្រើជាមួយ multiple inheritance។

ឧទាហរណ៍

//interface
public interface Animal {
 public void eat(String food);
 
 void sleep(int house);
 
 void makeNoice();
 
}
// class implement from interface នៅពេលនោះវានឹងទាមទាឲ្យយើង implement នៃ method interface Animal
public class Dog implements Animal{

 @Override
 public void eat(String food) {
  // TODO Auto-generated method stub
  System.out.println("The dog is eat "+food);
 }

 @Override
 public void sleep(int house) {
  // TODO Auto-generated method stub
  System.out.println("The dog pleep "+house+"h");
 }

 @Override
 public void makeNoice() {
  // TODO Auto-generated method stub
  System.out.println("Wow Wow...");
 }

}
public class Run {
public static void main(String[] args) {
 Dog dog = new Dog();
 dog.eat("Rice");
 dog.sleep(10);
 dog.makeNoice();
}
}

ការប្រើ implement ចាប់ពីចំនួន២ឡើងទៅ ដោយយើងប្រើ ","បន្តវា

//interface 1
public interface Animal {
 public void eat(String food);
 
 void sleep(int house);
 
 void makeNoice();
 
}
// interface 2
public interface Activeable {
 void run(double far);
}
// interface 2
public class Dog implements Animal, Activeable{

 @Override
 public void eat(String food) {
  // TODO Auto-generated method stub
  System.out.println("The dog is eat "+food);
 }

 @Override
 public void sleep(int house) {
  // TODO Auto-generated method stub
  System.out.println("The dog pleep "+house+"h");
 }

 @Override
 public void makeNoice() {
  // TODO Auto-generated method stub
  System.out.println("Make noice is Wow Wow...");
 }

 @Override
 public void run(double far) {
  // TODO Auto-generated method stub
  System.out.println("The dog can run "+far+"m/h");
 }

}
public class Run {
public static void main(String[] args) {
 Dog dog = new Dog();
 dog.eat("Rice");
 dog.sleep(10);
 dog.makeNoice();
 dog.run(1000.50);
}
}

ខាងក្រោមនេះយើងប្រើលាយចូលគ្នារវាង interface, class និង abstract class

//interface
public interface Animal {
 public void eat(String food);
 
 void sleep(int house);
 
 void makeNoice();
 
}
//Abstract class
public abstract class Speak {
 abstract void speak();
 
}
// extends និង implement
public class Dog extends Speak implements Animal{

 @Override
 public void eat(String food) {
  // TODO Auto-generated method stub
  System.out.println("The dog is eat "+food);
 }

 @Override
 public void sleep(int house) {
  // TODO Auto-generated method stub
  System.out.println("The dog pleep "+house+"h");
 }

 @Override
 public void makeNoice() {
  // TODO Auto-generated method stub
  System.out.println("Wow Wow...");
 }

 @Override
 void speak() {
  // TODO Auto-generated method stub
  System.out.println("The dog can't speak");
  
 }

}
public class Run {
public static void main(String[] args) {
 Dog dog = new Dog();
 dog.eat("Rice");
 dog.sleep(10);
 dog.makeNoice();
 dog.speak();
}
}

Abstract class VS interface

Post a Comment

0 Comments