Latest web development tutorials
×

Java หลักสูตร

Java หลักสูตร Java แนะนำโดยย่อ Java การกำหนดค่าการพัฒนาสภาพแวดล้อม Java พื้นฐานไวยากรณ์ Java วัตถุและการเรียน Java ชนิดข้อมูลพื้นฐาน Java ประเภทตัวแปร Java การปรับเปลี่ยน Java ผู้ประกอบการ Java โครงสร้างห่วง Java สาขาโครงสร้าง Java Number หมวดหมู่ Java Character หมวดหมู่ Java String หมวดหมู่ Java StringBuffer Java แถว Java วันที่เวลา Java นิพจน์ปกติ Java ทาง Java Stream,File,IO Java Scanner หมวดหมู่ Java การจัดการข้อยกเว้น

Java เชิงวัตถุ

Java สืบทอด Java Override/Overload Java polymorphism Java ระดับนามธรรม Java บรรจุภัณฑ์ Java อินเตอร์เฟซ Java บรรจุภัณฑ์

Java การสอนที่ทันสมัย

Java โครงสร้างข้อมูล Java คอลเลกชันกรอบ Java ยาชื่อสามัญ Java การทำให้เป็นอันดับ Java เขียนโปรแกรมเครือข่าย Java ส่ง Email Java การเขียนโปรแกรมแบบมัลติเธรด Java Appletรากฐาน Java เอกสารความคิดเห็น Java ตัวอย่าง Java 8 คุณสมบัติใหม่ Java MySQL สัมพันธ์

Java คลาสนามธรรม

ในแนวคิดเชิงวัตถุวัตถุทั้งหมดที่อธิบายไว้โดยแบ่งตามชนิด แต่ในทางกลับกันไม่ได้ทุกชั้นถูกนำมาใช้เพื่ออธิบายวัตถุวัตถุถ้าชั้นไม่ได้มีข้อมูลเพียงพอที่จะอธิบายที่เฉพาะเจาะจง ระดับดังกล่าวเป็นระดับนามธรรม

นอกจากนี้ยังมีระดับนามธรรมไม่สามารถวัตถุ instantiated คลาสการทำงานอื่น ๆ ยังคงมีอยู่วิธีการเข้าถึงตัวแปรสมาชิกวิธีการและการก่อสร้างของสมาชิกและหมวดหมู่ทั่วไปเดียวกัน

ตั้งแต่ระดับนามธรรมไม่สามารถ instantiated วัตถุดังนั้นระดับนามธรรมต้องได้รับการสืบทอดมาก็สามารถนำมาใช้ ด้วยเหตุนี้ยังมักจะกำหนดขั้นตอนการออกแบบหรือไม่ในการออกแบบระดับนามธรรม

ระดับผู้ปกครองมีชุดของ subclass ทั่วไป แต่เนื่องจากระดับผู้ปกครองตัวเองเป็นนามธรรมคุณไม่สามารถใช้วิธีการเหล่านี้


ระดับนามธรรม

ใช้ในการกำหนดระดับนามธรรมระดับนามธรรมในภาษา Java ตัวอย่างต่อไปนี้:

/* 文件名 : Employee.java */
public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   public Employee(String name, String address, int number)
   {
      System.out.println("Constructing an Employee");
      this.name = name;
      this.address = address;
      this.number = number;
   }
   public double computePay()
   {
     System.out.println("Inside Employee computePay");
     return 0.0;
   }
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + this.name
       + " " + this.address);
   }
   public String toString()
   {
      return name + " " + address + " " + number;
   }
   public String getName()
   {
      return name;
   }
   public String getAddress()
   {
      return address;
   }
   public void setAddress(String newAddress)
   {
      address = newAddress;
   }
   public int getNumber()
   {
     return number;
   }
}

สังเกตว่าระดับพนักงานไม่แตกต่างกันถึงแม้ว่าระดับคือระดับนามธรรม แต่ก็ยังมีสามตัวแปรสมาชิกวิธีการและสมาชิกเจ็ดของผู้สร้าง ตอนนี้ถ้าคุณลองตัวอย่างต่อไปนี้:

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{
   public static void main(String [] args)
   {
      /* 以下是不允许的,会引发错误 */
      Employee e = new Employee("George W.", "Houston, TX", 43);

      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
    }
}

เมื่อคุณพยายามที่จะรวบรวมระดับ AbstractDemo ก็จะสร้างข้อผิดพลาดต่อไปนี้:

Employee.java:46: Employee is abstract; cannot be instantiated
      Employee e = new Employee("George W.", "Houston, TX", 43);
                   ^
1 error

มรดกระดับนามธรรม

วิธีการทั่วไปของเราสืบเชื้อสายมาจากคลาส Employee:

/* 文件名 : Salary.java */
public class Salary extends Employee
{
   private double salary; //Annual salary
   public Salary(String name, String address, int number, double
      salary)
   {
       super(name, address, number);
       setSalary(salary);
   }
   public void mailCheck()
   {
       System.out.println("Within mailCheck of Salary class ");
       System.out.println("Mailing check to " + getName()
       + " with salary " + salary);
   }
   public double getSalary()
   {
       return salary;
   }
   public void setSalary(double newSalary)
   {
       if(newSalary >= 0.0)
       {
          salary = newSalary;
       }
   }
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
}

ในขณะที่เราไม่สามารถยกตัวอย่างวัตถุของคลาส Employee แต่ถ้าเรายกตัวอย่างวัตถุชั้นเงินเดือนที่สืบทอดจากตัวแปรระดับพนักงานและสมาชิกสามคนของสมาชิกเจ็ดของวิธีการ

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{
   public static void main(String [] args)
   {
      Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
      Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);

      System.out.println("Call mailCheck using Salary reference --");
      s.mailCheck();

      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
    }
}

โปรแกรมดังกล่าวข้างต้นจะรวบรวมผลมีดังนี้

Constructing an Employee
Constructing an Employee
Call mailCheck using  Salary reference --
Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference--
Within mailCheck of Salary class
Mailing check to John Adams with salary 2400.

วิธีนามธรรม

หากคุณต้องการที่จะออกแบบระดับที่มีวิธีการที่เป็นสมาชิกเฉพาะการดำเนินงานเฉพาะของวิธีการที่จะถูกกำหนดโดย subclasses ของมันแล้วคุณสามารถประกาศวิธีการในระดับผู้ปกครองเป็นวิธีนามธรรม

ในทำนองเดียวกันคำหลักนามธรรมสามารถนำมาใช้ในการประกาศวิธีนามธรรมวิธีนามธรรมมีเพียงชื่อวิธีและไม่มีร่างกายวิธีการ

วิธีนามธรรมไม่ได้ถูกกำหนดโดยตรงหลังชื่อวิธีด้วยเครื่องหมายอัฒภาคแทนวงเล็บปีกกา

public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //其余代码
}

ประกาศวิธีนามธรรมจะส่งผลให้ทั้งสองมีผลต่อไปนี้:

  • ถ้าชั้นมีวิธีการที่เป็นนามธรรมชั้นจะต้องเป็นนามธรรม
  • ประเภทรองใด ๆ จะต้องแทนที่วิธีนามธรรมของระดับผู้ปกครองหรือประกาศตัวเป็นนามธรรม

ได้รับการถ่ายทอดวิธีการนามธรรม subclasses ต้องแทนที่วิธีการนี้ มิฉะนั้น subclass ต้องได้รับการประกาศให้เป็นระดับนามธรรม ในท้ายที่สุดต้องมี subclasses ที่จะใช้วิธีนามธรรมมิฉะนั้นจากเริ่มต้นสู่รอบสุดท้าย subclass ระดับผู้ปกครองไม่สามารถนำมาใช้เพื่อยกตัวอย่างวัตถุ

ถ้าชั้นเงินเดือนที่ต้องการสืบทอดคลาส Employee ก็จะต้องดำเนินการ computePay () วิธีการ:

/* 文件名 : Salary.java */
public class Salary extends Employee
{
   private double salary; // Annual salary
  
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }

   //其余代码
}