Pages

Kamis, 11 Oktober 2012

Abstrac Class


Abstrak Metode dan Kelas

Kelas abstrak adalah kelas yang dideklarasikan abstrak-mungkin atau tidak mungkin termasuk metode abstrak. Kelas abstrak tidak dapat instantiated, tetapi mereka dapat subclassed.

Sebuah metode abstrak adalah metode yang dideklarasikan tanpa implementasi (tanpa kawat gigi, dan diikuti dengan titik koma), seperti ini:

abstrak batal MoveTo (ganda deltaX, ganda deltaY);
Jika kelas termasuk metode abstrak, kelas itu sendiri harus dinyatakan abstrak, seperti:

public abstract class GraphicObject {
    / / Mendeklarasikan field
    / / Mendeklarasikan non-abstrak metode
    kekosongan abstrak draw ();
}


 Contoh:

/ / Sebuah demonstrasi Sederhana abstrak.
abstrak class A {
kekosongan abstrak callme ();
/ / Metode beton masih diperbolehkan dalam kelas abstrak
batal callmetoo () {
System.out.println ("Ini adalah metode beton.");
}
}
class B extends A {
batal callme () {
System.out.println ("implementasi B dari callme.");
}
}

class AbstractDemo {
public static void main (String args []) {
B b = new B ();
b.callme ();
b.callmetoo ();
}
}


Perhatikan bahwa tidak ada objek dari kelas A dinyatakan dalam program. Seperti disebutkan, tidak mungkin untuk instantiate kelas abstrak. Satu titik lain: kelas A menerapkan metode beton disebut callmetoo (). Ini adalah hal yang bisa diterima. Kelas abstrak dapat mencakup implementasi sebanyak yang mereka lihat cocok.

Meskipun kelas abstrak tidak dapat digunakan untuk instantiate objek, mereka dapat digunakan untuk membuat referensi objek, karena pendekatan Jawa untuk menjalankan-time polymorphism diimplementasikan melalui penggunaan referensi superclass. Dengan demikian, itu harus mungkin untuk membuat referensi ke sebuah kelas abstrak sehingga dapat digunakan untuk menunjuk pada sebuah objek subclass. Anda akan melihat fitur ini dimasukkan untuk digunakan dalam contoh berikut. Menggunakan kelas abstrak, Anda dapat meningkatkan kelas Gambar ditampilkan sebelumnya. Karena tidak ada konsep yang berarti daerah untuk tokoh dua dimensi terdefinisi, versi berikut dari program menyatakan wilayah () sebagai abstrak dalam Gambar. Ini, tentu saja, berarti bahwa semua kelas turunan dari Gambar harus menimpa wilayah ().

/ / Menggunakan metode abstrak dan kelas.
kelas abstrak Gambar {
dim1 ganda;
dim2 ganda;
Gambar (ganda, ganda b) {
dim1 = a;
dim2 = b;
}
/ / Daerah kini metode abstrak
abstrak ganda area ();
}
Rectangle kelas meluas Gambar {
Rectangle (ganda, ganda b) {
super (a, b);
}
/ / Menimpa daerah untuk persegi panjang
ganda area () {
System.out.println ("Di dalam area untuk Rectangle.");
kembali dim1 * dim2;
}
}

class Segitiga meluas Gambar {
Segitiga (ganda, ganda b) {
super (a, b);
}
/ / Menimpa daerah untuk segitiga siku-siku
ganda area () {
System.out.println ("Di dalam area untuk segitiga.");
kembali dim1 * dim2 / 2;
}
}

class AbstractAreas {
public static void main (String args []) {
/ / Gambar f = new Gambar (10, 10); / / ilegal sekarang
Rectangle r = new Rectangle (9, 5);
Segitiga t = new Segitiga (10, 8);
Gambar figref, / / ​​ini adalah OK, tidak ada objek yang dibuat
figref = r;
System.out.println ("Daerah" + figref.area ());
figref = t;
System.out.println ("Daerah" + figref.area ());
}
}

Sebagai komentar di dalam main () menunjukkan, hal itu tidak mungkin lagi untuk menyatakan objek Gambar jenis, karena sekarang abstrak. Dan, semua subclass Gambar harus menimpa wilayah (). Untuk membuktikan ini kepada diri sendiri, mencoba menciptakan subclass yang tidak menimpa wilayah (). Anda akan menerima kesalahan saat kompilasi.

Meskipun tidak mungkin untuk menciptakan sebuah objek dari tipe Gambar, Anda dapat membuat sebuah variabel referensi Gambar jenis. The figref variabel dinyatakan sebagai referensi untuk Gambar, yang berarti bahwa hal itu dapat digunakan untuk merujuk ke sebuah objek dari setiap kelas yang diturunkan dari Gambar. Sebagaimana dijelaskan, itu adalah melalui variabel referensi superclass bahwa metode ditimpa diselesaikan pada waktu berjalan.

0 komentar:

Posting Komentar

Anda bertanya, saya akan mencoba menjawabnya ~,~

 

Blogger news

Blogroll