kelas abstrak Java

Dalam konsep berorientasi objek, semua benda yang dijelaskan oleh jenis, tetapi sebaliknya, tidak semua kelas yang digunakan untuk menggambarkan objek, objek jika kelas tidak mengandung informasi yang cukup untuk menggambarkan tertentu kelas tersebut adalah kelas abstrak.

Selain kelas abstrak tidak dapat instantiated objek, kelas fungsional lainnya masih ada, cara untuk mengakses anggota variabel, metode dan konstruktor dari anggota dan kategori umum yang sama.

Sejak kelas abstrak tidak dapat dipakai objek, sehingga kelas abstrak harus diwariskan, dapat digunakan. Untuk alasan ini juga, biasanya ditentukan pada tahap desain atau tidak untuk merancang sebuah kelas abstrak.

kelas induk berisi kumpulan subclass umum, namun karena kelas induk itu sendiri adalah abstrak, Anda tidak dapat menggunakan metode ini.


kelas abstrak

Gunakan untuk mendefinisikan kelas abstrak kelas abstrak dalam bahasa Jawa. Contoh berikut:

/* 文件名 : 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;
   }
}

Memperhatikan bahwa kelas karyawan tidak berbeda, meskipun kelas adalah kelas abstrak, tetapi masih memiliki tiga variabel anggota, metode, dan tujuh anggota konstruktor. Sekarang jika Anda mencoba contoh berikut:

/* 文件名 : 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();
    }
}

Ketika Anda mencoba untuk mengkompilasi kelas AbstractDemo, maka akan menghasilkan error berikut:

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

Abstrak warisan kelas

Pendekatan umum kami diwariskan oleh kelas Karyawan:

/* 文件名 : 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;
   }
}

Sementara kita tidak bisa instantiate sebuah obyek dari kelas Employee, tetapi jika kita instantiate objek kelas Gaji yang mewarisi dari variabel kelas karyawan dan tiga anggota dari tujuh anggota metode.

/* 文件名 : 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();
    }
}

Program di atas dikompilasi hasil adalah sebagai berikut:

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.

metode abstrak

Jika Anda ingin merancang sebuah kelas yang berisi metode anggota tertentu, implementasi khusus dari metode ini ditentukan oleh subclass, maka Anda dapat mendeklarasikan metode di kelas induk merupakan metode abstrak.

Demikian kata kunci Abstrak dapat digunakan untuk menyatakan metode abstrak, metode abstrak hanya berisi nama metode, dan tidak ada metode tubuh.

metode abstrak tidak didefinisikan, tepat di belakang nama metode dengan koma bukan kurung kurawal.

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

Mendeklarasikan metode abstrak akan menghasilkan berikut dua hasil:

  • Jika kelas berisi metode abstrak, kelas harus abstrak.
  • Setiap subclass harus mengesampingkan metode abstrak dari kelas induk, atau menyatakan dirinya abstrak.

Mewarisi metode subclass abstrak harus mengganti metode ini. Jika tidak, subclass harus dinyatakan sebagai kelas abstrak. Pada akhirnya, harus ada subclass untuk menerapkan metode abstrak, jika tidak, dari awal untuk kelas induk akhir subclass tidak dapat digunakan untuk instantiate objek.

Jika kelas Gaji mewarisi kelas karyawan, itu harus menerapkan () metode 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;
   }

   //其余代码
}