Computer >> Máy Tính >  >> Lập trình >> Java

Tại sao một lớp Java không thể vừa trừu tượng vừa là cuối cùng?

Lớp trừu tượng

Một lớp có chứa 0 hoặc nhiều phương thức trừu tượng được gọi là lớp trừu tượng. Nếu nó chứa ít nhất một phương thức trừu tượng, nó phải được khai báo là trừu tượng.

Nếu bạn muốn sử dụng phương thức cụ thể trong một lớp trừu tượng, bạn cần kế thừa lớp đó, cung cấp triển khai cho các phương thức trừu tượng (nếu có) và sau đó, bạn sử dụng đối tượng lớp con, bạn có thể gọi các phương thức cần thiết.

Ví dụ

Trong ví dụ Java sau, lớp trừu tượng MyClass chứa một phương thức cụ thể có hiển thị tên.

Từ một lớp khác (AbstractClassExample), chúng ta đang kế thừa lớp MyClass và gọi hiển thị phương thức cụ thể của nó bằng cách sử dụng đối tượng lớp con.

abstract class MyClass {
   public void display() {
      System.out.println("This is a method of abstract class");
   }
}
public class AbstractClassExample extends MyClass {
   public static void main(String args[]) {
      new AbstractClassExample().display();
   }
}

Đầu ra

This is a method of abstract class

Lớp cuối cùng

Nếu bạn khai báo một lớp cuối cùng, bạn không thể gia hạn nếu bạn cố gắng mở rộng lớp cuối cùng, lỗi thời gian biên dịch sẽ được tạo ra với nội dung “không thể kế thừa từ SuperClass cuối cùng”

Ví dụ

Trong chương trình Java sau, chúng ta có một lớp cuối cùng với tên SuperClass và chúng tôi đang cố gắng kế thừa nó từ một lớp khác (SubClass).

final class SuperClass {
   public void display() {
      System.out.println("This is a method of the superclass");
   }
}

Lỗi thời gian biên dịch

Khi biên dịch, chương trình này tạo ra một lỗi biên dịch như được hiển thị bên dưới -

SubClass.java:7: error: cannot inherit from final SuperClass
public class SubClass extends SuperClass{
                              ^
1 error

Cả trừu tượng và cuối cùng

Nếu bạn khai báo một lớp trừu tượng, để sử dụng nó, bạn phải mở rộng nó và nếu bạn khai báo một lớp cuối cùng, bạn không thể mở rộng nó, vì cả hai mâu thuẫn với nhau, bạn không thể khai báo một lớp cả trừu tượng và cuối cùng nếu bạn làm như vậy lỗi thời gian biên dịch. sẽ được tạo.

Ví dụ

public final abstract class Example {
   public void sample() {
   }
}

Lỗi thời gian biên dịch

Example.java:1: error: illegal combination of modifiers: abstract and final

public final abstract class Example {
                      ^
1 error