CodeGym /Blog Java /Ngẫu nhiên /Các phương thức và lớp trừu tượng Java

Các phương thức và lớp trừu tượng Java

Xuất bản trong nhóm
Các phương thức trừu tượng là một công cụ mạnh mẽ của Java và cung cấp cho ngôn ngữ hướng đối tượng này nhiều khả năng hơn nữa khi nói đến tính đa hình. Một phương thức trừu tượng của Java có thể được sử dụng để tạo một khung cơ bản cho toàn bộ chương trình và cho phép bạn điều chỉnh khi cần.Phương thức trừu tượng Java và bạn - 1

Phương thức trừu tượng là gì?

Một phương thức trừu tượng là một phương thức không có triển khai. Nghĩa là, nó chỉ có một khai báo, vì vậy bạn biết tên, kiểu trả về và các biến mà nó sẽ chấp nhận. Đây là một ví dụ về một phương pháp trừu tượng cơ bản:

public abstract int example(int a1, int a2);
Khi bạn nhìn vào phương thức này, bạn có thể biết rằng nó trả về một số nguyên và nó chấp nhận hai số nguyên làm đối số của nó. Những gì bạn không thể nói là làm thế nào phương pháp này được thực hiện. Đó là bởi vì để thực hiện nó, bạn phải ghi đè lên nó. Khi tạo một phương thức trừu tượng trong java, bạn phải tuân thủ một số nguyên tắc, nếu không chương trình của bạn sẽ không biên dịch chính xác. Nhớ:
  • Các phương thức trừu tượng của Java không có triển khai. Nghĩa là, chúng không bao giờ được theo sau bởi các dấu ngoặc nhọn và phần thân cho biết phương thức sẽ được sử dụng như thế nào. Nó chỉ kết thúc bằng dấu chấm phẩy.

  • Nếu bạn tạo một phương thức trừu tượng, thì phương thức đó chỉ có thể được đưa vào một lớp trừu tượng. Nghĩa là, bạn không thể có một lớp cụ thể mà có một phương thức trừu tượng bên trong nó.
    Tôi. Lưu ý thêm, nếu bạn có một lớp trừu tượng, nó có thể chứa các hàm tạo. Tuy nhiên, nó không nhất thiết phải có một phương thức trừu tượng.

  • Khi một lớp cụ thể mở rộng một lớp trừu tượng, nó cũng phải thực hiện tất cả các phương thức trừu tượng của lớp cha hoặc nó không thể là cụ thể và phải được khai báo trừu tượng.

Hai điều cuối cùng có thể hơi khó hiểu, vì vậy hãy làm rõ điều đó ngay lập tức.

Mở rộng các lớp Java trừu tượng

Giả sử rằng chúng ta muốn viết một chương trình về các hình cơ bản sẽ trả về chu vi và diện tích. Vì vậy, chúng tôi tạo một lớp trừu tượng cha mẹ. Nhưng bởi vì mỗi hình dạng có quy tắc riêng của nó, mỗi cái phải được tính toán khác nhau, vì vậy chúng tôi viết lớp Hình dạng trừu tượng như thế này:

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

abstract double area();
  		abstract double perimeter();
}
Bây giờ, nếu chúng ta muốn thực sự sử dụng các phương thức trừu tượng này, chúng ta phải mở rộng lớp cha trừu tượng của Java là Shape và sau đó khởi tạo các phương thức. Vì vậy, mỗi lớp cụ thể phải thực hiện các phương thức trừu tượng về diện tích và chu vi.

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());
  
    } 
} 
Đầu ra từ bàn điều khiển sau đó trông như thế này:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Lưu ý rằng lớp Quadrilateral không phải khởi tạo hàm tạo Shape(String name) từ lớp cha Shape . Đó là bởi vì nó không phải là một phương pháp trừu tượng. Tuy nhiên, nếu bạn chỉ triển khai một diện tích hoặc chu vi trong một lớp, lớp mới sẽ phải trừu tượng vì nó không bao gồm cả hai. Bạn cũng có thể sử dụng các phương thức trừu tượng trong Giao diện.

Các phương thức Java trừu tượng với các giao diện

Hãy nhanh chóng xem lại giao diện là gì và nó khác với lớp trừu tượng như thế nào. Trong một giao diện, bất kỳ biến nào được khai báo trong giao diện đều là công khai, tĩnh và cuối cùng. Mặt khác, các lớp trừu tượng chỉ có các biến không phải là cuối cùng. Theo mặc định, mọi thứ trong một giao diện đều được công khai. Một lớp trừu tượng có thể có private, protected, public, v.v. Cuối cùng, một lớp không mở rộng một giao diện, nó thực hiện giao diện đó. Trước JDK 8, một giao diện không thể có bất kỳ thứ gì trong đó ngoài các phương thức trừu tượng. Bây giờ, một giao diện có thể có các phương thức tĩnh và mặc định. Do đó, các phương pháp hay nhất đã chuyển từ việc sử dụng các phương thức trừu tượng làm mẫu có thể mở rộng sang tập trung vào Giao diện và triển khai chúng. Vì vậy, nếu bạn định tạo Hình dạng dưới dạng Giao diện và sau đó triển khai nó dưới dạng Hình tứ giác, nó sẽ trông như thế nào? Trước tiên, bạn sẽ phải loại bỏ hàm tạo Shape(String name) . Nó sẽ trông như thế này chỉ với hai phương thức trừu tượng:

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); 
    	  } 
}
Cuối cùng, việc sử dụng Tứ giác mới khi nó triển khai giao diện Hình dạng sẽ giống như vậy:

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());
  
    } 
}
Và giao diện điều khiển in ra sẽ như thế này:

Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Nếu bạn muốn khám phá thêm về sự khác biệt giữa giao diện và lớp trừu tượng, bạn có thể tìm thêm thông tin tại đây.

Nhưng tại sao lại sử dụng các phương thức Java trừu tượng?

Có nhiều lý do khiến các phương thức trừu tượng trong Java được sử dụng và tại sao bạn nên cảm thấy thoải mái khi sử dụng chúng. Dưới đây là ba lý do nhanh chóng giải thích tại sao bạn nên sử dụng chúng khi thích hợp.
  1. Tránh trùng lặp các nỗ lực – Nhìn lại ví dụ viết mã của chúng tôi; hãy tưởng tượng rằng bạn và nhóm của bạn cần tạo các lớp cho các hình dạng khác với hình chữ nhật. Bạn có thể nghĩ ra bao nhiêu cách khác nhau để thiết kế lớp học đó? Mười? Mười lăm? Và đó là một vấn đề đơn giản. Hãy tưởng tượng một cái gì đó phức tạp hơn nhiều. Bạn và nhóm của bạn có thể nghĩ ra hàng trăm cách. Sau đó, bạn sẽ phải đối mặt với nhiệm vụ khó khăn là kết hợp chúng lại với nhau thành một chương trình mạch lạc. Điều này đưa chúng ta đến điểm tiếp theo: xác định việc triển khai.

  2. Các phương thức trừu tượng trong Java cho phép định nghĩa việc sử dụng và triển khai – Khi bạn sử dụng một lớp hoặc giao diện trừu tượng và theo thiết kế, các phương thức trừu tượng, bạn đang xác định cách người khác sẽ tương tác với giao diện của bạn. Điều đó cho phép họ biết những biến nào họ nên sử dụng và những kiểu trả về nào họ có thể mong đợi.
    Mặc dù họ có thể ghi đè chúng và tạo các lớp cụ thể triển khai giao diện của bạn theo những cách độc đáo, nhưng bạn vẫn đặt mục tiêu sử dụng cốt lõi cho mã của mình. Nếu ai đó muốn triển khai Hình dạng, thì họ phải ghi đè hoặc triển khai cả chu vi và diện tích.

  3. Khả năng đọc và gỡ lỗi – Có các phương thức trừu tượng sẽ nâng cao khả năng đọc mã của bạn. Khi bạn viết một lớp cài đặt một giao diện, bạn biết phải tìm gì. Bạn biết rằng mọi phương thức trừu tượng trong giao diện sẽ được triển khai và điều đó giúp dễ đọc và theo dõi bất kỳ lỗi nào hơn. Các phương thức trừu tượng chỉ là khởi đầu của việc học cách sử dụng tính đa hình đúng cách trong Java và các ngôn ngữ hướng đối tượng khác. Khi bạn bắt đầu hiểu và sử dụng chúng, một chương hoàn toàn mới trong hành trình viết mã của bạn sẽ bắt đầu.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION