Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เหตุใดคลาส Java จึงเป็นทั้งนามธรรมและขั้นสุดท้ายไม่ได้


คลาสนามธรรม

คลาสที่มีเมธอดนามธรรมตั้งแต่ 0 วิธีขึ้นไปเรียกว่าคลาสนามธรรม หากมีวิธีการที่เป็นนามธรรมอย่างน้อยหนึ่งวิธี จะต้องประกาศให้เป็นนามธรรม

หากคุณต้องการใช้เมธอดที่เป็นรูปธรรมในคลาสนามธรรม คุณต้องสืบทอดคลาส จัดเตรียมการนำไปใช้งานกับเมธอด abstract (ถ้ามี) จากนั้น คุณใช้อ็อบเจ็กต์คลาสย่อย คุณสามารถเรียกใช้เมธอดที่ต้องการได้

ตัวอย่าง

ในตัวอย่าง Java ต่อไปนี้ คลาสนามธรรม MyClass มีเมธอดที่เป็นรูปธรรมพร้อมการแสดงชื่อ

จากคลาสอื่น (AbstractClassExample) เรากำลังสืบทอดคลาส MyClass และเรียกใช้การแสดงเมธอดที่เป็นรูปธรรมโดยใช้ออบเจ็กต์คลาสย่อย

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();
   }
}

ผลลัพธ์

This is a method of abstract class

คลาสสุดท้าย

หากคุณประกาศคลาสสุดท้าย คุณจะไม่สามารถขยายได้หากคุณพยายามขยายคลาสสุดท้าย เวลาคอมไพล์จะถูกสร้างขึ้นโดยบอกว่า “ไม่สามารถสืบทอดจาก SuperClass สุดท้าย”

ตัวอย่าง

ในโปรแกรม Java ต่อไปนี้ เรามีคลาสสุดท้ายชื่อ SuperClass และเรากำลังพยายามที่จะสืบทอดมาจากคลาสอื่น (SubClass)

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

ข้อผิดพลาดในการคอมไพล์

ในการคอมไพล์ โปรแกรมนี้สร้างข้อผิดพลาดในการคอมไพล์ดังแสดงด้านล่าง -

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

ทั้งนามธรรมและขั้นสุดท้าย

หากคุณประกาศ class abstract หากต้องการใช้งาน คุณต้องขยายคลาส และหากคุณประกาศคลาสสุดท้าย คุณจะไม่สามารถขยายได้ เนื่องจากทั้งสองขัดแย้งกัน คุณจะไม่สามารถประกาศคลาสทั้งแบบนามธรรมและขั้นสุดท้ายได้ หากคุณทำเช่นนั้น ข้อผิดพลาดเวลาคอมไพล์ จะถูกสร้างขึ้น

ตัวอย่าง

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

ข้อผิดพลาดในการคอมไพล์

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

public final abstract class Example {
                      ^
1 error