CodeGym /Blog Java /rawak /Kaedah dan Kelas Abstrak Java
John Squirrels
Tahap
San Francisco

Kaedah dan Kelas Abstrak Java

Diterbitkan dalam kumpulan
Kaedah abstrak ialah alat Java yang berkuasa dan memberikan bahasa berorientasikan objek ini lebih banyak keupayaan apabila ia datang kepada polimorfisme. Kaedah abstrak Java boleh digunakan untuk mencipta rangka kerja asas untuk keseluruhan program dan membolehkan anda melaraskan mengikut keperluan.Kaedah Abstrak Java dan Anda - 1

Apakah Kaedah Abstrak?

Kaedah abstrak ialah kaedah yang tidak mempunyai pelaksanaan. Iaitu, ia hanya mempunyai pengisytiharan, jadi anda tahu nama, jenis pulangan, dan pembolehubah yang akan diterimanya. Berikut ialah contoh kaedah abstrak asas:

public abstract int example(int a1, int a2);
Apabila anda melihat kaedah ini, anda boleh memberitahu bahawa ia mengembalikan integer dan ia menerima dua integer sebagai hujahnya. Apa yang anda tidak boleh beritahu ialah bagaimana kaedah ini dilaksanakan. Ini kerana untuk melaksanakannya, anda perlu mengatasinya. Apabila mencipta kaedah abstrak dalam java, anda perlu mematuhi beberapa garis panduan atau program anda tidak akan disusun dengan betul. Ingat:
  • Kaedah abstrak Java tidak mempunyai pelaksanaan. Iaitu, mereka tidak boleh diikuti oleh pendakap kerinting dan badan yang memberitahu bagaimana kaedah itu digunakan. Ia hanya diakhiri dengan koma bertitik.

  • Jika anda mencipta kaedah abstrak, itu hanya boleh dimasukkan ke dalam kelas abstrak. Iaitu, anda tidak boleh mempunyai kelas konkrit yang mempunyai kaedah abstrak di dalamnya.
    i. Sebagai nota sampingan, jika anda mempunyai kelas abstrak, ia boleh mengandungi pembina. Ia tidak perlu mempunyai kaedah abstrak, bagaimanapun.

  • Apabila kelas konkrit memanjangkan kelas abstrak, ia juga mesti melaksanakan semua kaedah abstrak kelas induk atau ia tidak boleh konkrit dan mesti diisytiharkan abstrak.

Dua yang terakhir mungkin sedikit mengelirukan, jadi mari kita jelaskan dengan segera.

Memperluas Kelas Java Abstrak

Katakan kita ingin menulis program tentang bentuk asas yang akan mengembalikan perimeter dan luas. Jadi kami mencipta kelas abstrak induk. Tetapi kerana setiap bentuk mempunyai peraturannya sendiri, setiap satu mesti dikira secara berbeza, jadi kami menulis kelas Bentuk abstrak seperti ini:

abstract class Shape {
  		String shapeName = " ";
  		Shape(String name) { 
    			this.shapeName = name; 
  		} 

abstract double area();
  		abstract double perimeter();
}
Sekarang, jika kita ingin benar-benar menggunakan kaedah abstrak ini, kita perlu melanjutkan kelas induk Java abstrak Shape dan kemudian membuat instantiate kaedah. Jadi setiap kelas konkrit mesti melaksanakan kaedah abstrak kawasan dan perimeter.

class Quadrilateral extends Shape  
{ 
    double length, width; 
      
    Quadrilateral(double l, double w, String name) 
    { 
        super(name); 
        this.length = l; 
        this.width = w; 
    } 
      
    @Override
    public double perimeter()  
    { 
        return ((2*length)+(2*width));
    } 
      
    @Override
    public double area()  
    { 
        return (length*width); 
    } 
}

Implementing the Quadrilateral class would then look like this
class Main
{ 
    public static void main (String[] args)  
    { 
      
        // creating a Quadrilateral object using Shape as reference 
        Shape rectangle = new Quadrilateral(3,4, "Rectangle"); 
        System.out.println("Area of rectangle is " + rectangle.area()); 
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
  
    } 
} 
Output dari konsol kemudian kelihatan seperti ini:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Ambil perhatian bahawa kelas Quadrilateral tidak perlu membuat instantiate Shape(String name) constructor daripada kelas induk Shape . Itu kerana ia bukan kaedah abstrak. Walau bagaimanapun, jika anda hanya melaksanakan kawasan atau perimeter dalam kelas, kelas baharu itu mestilah abstrak kerana ia tidak termasuk kedua-duanya. Anda juga boleh menggunakan kaedah abstrak dalam Antara Muka.

Kaedah Java Abstrak dengan Antara Muka

Mari kita semak dengan cepat apakah antara muka dan bagaimana ia berbeza daripada kelas abstrak. Dalam antara muka, sebarang pembolehubah yang diisytiharkan dalam antara muka adalah awam, statik dan muktamad. Kelas abstrak sebaliknya, hanya mempunyai pembolehubah bukan akhir. Segala-galanya dalam antara muka adalah awam secara lalai. Kelas abstrak boleh mempunyai peribadi, dilindungi, awam, dll. Akhirnya, kelas tidak memanjangkan antara muka, ia melaksanakannya. Sebelum JDK 8, antara muka tidak boleh mempunyai apa-apa selain kaedah abstrak. Kini, antara muka boleh mempunyai kaedah lalai dan statik. Oleh sebab itu, amalan terbaik telah beralih daripada menggunakan kaedah abstrak sebagai templat boleh dilanjutkan dan memfokuskan pada Antara Muka dan melaksanakannya. Jadi jika anda mencipta Bentuk sebagai Antara Muka dan kemudian melaksanakannya sebagai Segiempat, bagaimana rupanya? Pertama, anda perlu menghapuskan pembina Shape(String name) . Ia akan kelihatan seperti ini dengan hanya dua kaedah abstrak:

interface Shape {

  abstract double area();
  abstract double perimeter();
}


So the Quadrilateral class would then look like this:
class Quadrilateral implements Shape {  

  double length, width; 
      
    	  Quadrilateral(double l, double w) {
    
    	    this.length = l; 
    	    this.width = w; 
    	  } 
      
    	  @Override
    	  public double perimeter() {
     
    	    return ((2*length)+(2*width));
    	  } 
      
    	  @Override
    	  public double area() {
    
   	    return (length*width); 
    	  } 
}
Akhirnya, menggunakan Segiempat baharu kerana ia melaksanakan antara muka Bentuk adalah sama:

class Main
{ 
    public static void main (String[] args)  
    { 
      
        // creating a Quadrilateral object using Shape as reference 
        Shape rectangle = new Quadrilateral(3,4); 
        System.out.println("Area of rectangle is " + rectangle.area()); 
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
  
    } 
}
Dan cetakan konsol akan kelihatan seperti ini:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Jika anda ingin meneroka lebih lanjut tentang perbezaan antara antara muka dan kelas abstrak, anda boleh mendapatkan maklumat lanjut di sini.

Tetapi Mengapa Menggunakan Kaedah Java Abstrak?

Terdapat banyak sebab mengapa kaedah abstrak dalam Java digunakan dan mengapa anda perlu selesa menggunakannya. Berikut ialah tiga sebab cepat mengapa anda perlu menggunakannya apabila ia sesuai.
  1. Elakkan pertindihan usaha – Lihat semula pengekodan contoh kami; bayangkan bahawa anda dan pasukan anda perlu membuat kelas untuk bentuk selain daripada segi empat tepat. Berapa banyak cara berbeza yang anda boleh buat untuk mereka bentuk kelas itu? Sepuluh? Lima belas? Dan itu masalah mudah. Bayangkan sesuatu yang lebih kompleks. Anda dan pasukan anda boleh menghasilkan seratus cara. Kemudian anda akan berhadapan dengan tugas yang sukar untuk menyatukannya menjadi satu program yang koheren. Ini membawa kita ke perkara seterusnya: mentakrifkan pelaksanaan.

  2. Kaedah Abstrak dalam Java membenarkan definisi penggunaan dan pelaksanaan – Apabila anda menggunakan kelas atau antara muka abstrak, dan mengikut reka bentuk, kaedah abstrak, anda mentakrifkan cara orang lain akan berinteraksi dengan antara muka anda. Itu membolehkan mereka mengetahui pembolehubah yang sepatutnya mereka gunakan dan jenis pulangan yang boleh mereka jangkakan.
    Walaupun mereka boleh mengatasinya dan mencipta kelas konkrit yang melaksanakan antara muka anda dengan cara yang unik, anda masih menetapkan penggunaan teras untuk kod anda. Jika seseorang ingin melaksanakan Shape, maka mereka perlu mengatasi atau melaksanakan kedua-dua perimeter dan luas.

  3. Kebolehbacaan dan Penyahpepijatan – Mempunyai kaedah abstrak akan meningkatkan kebolehbacaan kod anda. Apabila anda menulis kelas yang melaksanakan antara muka, anda tahu perkara yang perlu dicari. Anda tahu bahawa setiap kaedah abstrak dalam antara muka akan berada dalam pelaksanaan, dan ini memudahkan untuk membaca dan menjejaki sebarang pepijat. Kaedah abstrak hanyalah permulaan untuk mempelajari cara menggunakan polimorfisme dengan betul dalam Java dan bahasa berorientasikan objek lain. Apabila anda mula memahami dan menggunakannya, satu bab baharu dalam perjalanan pengekodan anda akan bermula.

Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION