Minggu, 20 Mei 2012

Abstraction


Abstraction adalah salah satu yang tidak dapat instantiated. Semua fungsi lain dari kelas masih ada, dan bidang, metode, dan konstruktor semuanya diakses dengan cara yang sama. Anda hanya tidak dapat membuat instance dari kelas abstrak.

/ * File name: Employee.java * /
 masyarakat kelas Karyawan abstrak
 {
    swasta String nama;
    swasta String alamat;
    private int nomor;
    publik Karyawan (String nama, alamat String, nomor int)
    {
       System.out.println ("Membangun Karyawan");
       this.name = nama;
       this.address = alamat;
       this.number = jumlah;
    }
    public double computePay ()
    {
      System.out.println ("Inside Karyawan computePay");
      kembali 0,0;
    }
    public void MAILCHECK ()
    {
       System.out.println ("mengirimkan cek untuk" + this.name
        + "" + This.address);
    }
    public String toString ()
    {
       kembali nama "" + alamat + "+" + nomor;
    }
    public String getName ()
    {
       kembali nama;
    }
    public String getAddress ()
    {
       kembali alamat;
    }
    public void setAddress (String newAddress)
   {
       alamat = newAddress;
   }
   public int getNumber ()
   {
      kembali nomor;
   }
 }



Perhatikan bahwa tidak ada yang berbeda di kelas Karyawan. Kelas ini sekarang abstrak, tetapi masih memiliki tiga bidang, tujuh metode, dan satu konstruktor.
Sekarang jika Anda akan mencoba sebagai berikut:

/ * File name: AbstractDemo.java * /
 masyarakat kelas AbstractDemo
 {
    public void static main (String [] args)
    {
  
       / * Berikut ini tidak diperbolehkan dan akan menimbulkan kesalahan * /
       Karyawan e = Karyawan baru ("George W.", "Houston, TX", 43);

       System.out.println ("\ n Panggil MAILCHECK menggunakan
                                    Referensi karyawan - ");
       e.mailCheck ();
     }
 }


Ketika Anda akan mengkompilasi kelas di atas maka Anda akan mendapatkan error berikut:

Employee.java: 46: Karyawan adalah abstrak, tidak dapat instantiated
       Karyawan e = Karyawan baru ("George W.", "Houston, TX", 43);
                    ^
 1 error1

Memperluas Kelas Abstrak:

Kita bisa memperpanjang kelas karyawan dengan cara yang normal sebagai berikut:

 / * File name: Salary.java * /
 Gaji kelas publik meluas Karyawan
 {
    pribadi ganda gaji, gaji / / Tahunan
    Gaji publik (String nama, alamat String, nomor int, double
       gaji)
    {
        super (nama, alamat, nomor);
        setSalary (gaji);
    }
    public void MAILCHECK ()
   {
        System.out.println ("Dalam MAILCHECK kelas Gaji");
        System.out.println ("Mailing memeriksa untuk" + getName ()
        + "Dengan gaji" + gaji);
    }
    public double getSalary ()
    {
        kembali gaji;
    }
    public void setSalary (newSalary ganda)
    {
        if (newSalary> = 0,0)
        {
           gaji = newSalary;
        }
    }
    public double computePay ()
    {
       System.out.println ("Computing gaji membayar untuk" + getName ());
       kembali salary/52;
    }
 }

Di sini kita tidak bisa instantiate Karyawan baru, tetapi jika kita instantiate objek Gaji baru, objek Gaji akan mewarisi tiga bidang dan tujuh metode dari Karyawan.

 / * File name: AbstractDemo.java * /
 masyarakat kelas AbstractDemo
 {
    public void static main (String [] args)
    {
       Gaji s = new Gaji ("Mohd Mohtashim", "Ambehta, UP",
                                  3, 3600,00);
       Gaji e = new Gaji ("John Adams", "Boston, MA",
                                  2, 2400,00);

       System.out.println ("Panggilan MAILCHECK menggunakan
                                    Referensi Gaji - ");
       s.mailCheck ();
       System.out.println ("\ n Panggil MAILCHECK menggunakan
                                    Referensi karyawan - ");
       e.mailCheck ();
     }
 }

Hal ini akan menghasilkan hasil sebagai berikut:

 Membangun Karyawan
 Membangun Karyawan
 Panggil MAILCHECK menggunakan referensi Gaji -
 Dalam MAILCHECK kelas Gaji
 Mailing memeriksa untuk Mohtashim Mohd dengan gaji 3600.0

 Panggil MAILCHECK menggunakan referensi Karyawan -
 Dalam MAILCHECK kelas Gaji
 Mailing memeriksa untuk John Adams dengan gaji 2400.
Abstrak Metode:
Jika Anda ingin kelas berisi metode tertentu tetapi Anda ingin implementasi aktual dari metode yang akan ditentukan oleh kelas anak, Anda dapat mendeklarasikan metode pada kelas induk sebagai abstrak.

Kata kunci abstrak juga digunakan untuk menyatakan sebuah metode sebagai metode abstract.An abstrak terdiri dari metode tanda tangan, tetapi tidak ada metode tubuh.

Metode abstrak akan memiliki definisi tidak, dan tanda tangan diikuti dengan titik koma, bukan kurung kurawal sebagai berikut:

 Masyarakat kelas Karyawan abstrak
 {
    swasta String nama;
    swasta String alamat;
    private int nomor;
  
    publik computePay ganda abstrak ();
  
    / / Sisa definisi kelas
 }

Mendeklarasikan metode sebagai abstrak memiliki dua hasil:

Kelas ini juga harus dinyatakan abstrak. Jika kelas berisi metode abstrak, kelas harus abstrak juga.

Setiap kelas anak harus baik mengganti metode abstrak atau mendeklarasikan sendiri abstrak.

Sebuah kelas anak yang mewarisi metode abstrak harus menimpanya. Jika tidak, mereka harus abstrak, dan setiap anak-anak mereka harus menimpanya.

Akhirnya, kelas keturunan harus menerapkan metode abstrak, jika tidak, Anda akan memiliki hierarki kelas abstrak yang tidak dapat instantiated.

Jika Gaji adalah memperluas kelas karyawan maka diperlukan untuk melaksanakan computePay () metode sebagai berikut:

 / * File name: Salary.java * /
 Gaji kelas publik meluas Karyawan
 {
    pribadi ganda gaji, gaji / / Tahunan
 
    public double computePay ()
    {
       System.out.println ("Computing gaji membayar untuk" + getName ());
       kembali salary/52;
    }

    / / Sisa definisi kelas
 }

Tidak ada komentar:

Posting Komentar