Hai! Dalam pelajaran sebelumnya, kita telah secara singkat mengenal konsep pewarisan. Hari ini, kita akan membahas topik ini lagi, tetapi sekali lagi tidak terlalu dalam. Kami masih akan memiliki pelajaran yang lebih rinci tentang ini di masa depan. Hari ini kita hanya akan melihat sekilas beberapa contoh praktis dan berkenalan dengan operator yang menarik di Jawa.
Inheritance adalah mekanisme pemrograman (termasuk di Java) yang memungkinkan Anda mendeklarasikan kelas baru berdasarkan kelas yang sudah ada. Kelas turunan kemudian mendapatkan akses ke bidang dan metode kelas induk. Mengapa kita membutuhkan ini? Nah, bayangkan Anda perlu membuat beberapa kelas mobil dalam suatu program: Truk, Mobil Balap, Sedan, Pickup, dll. Bahkan sebelum menulis kode apa pun, Anda tahu pasti bahwa semua kelas ini memiliki banyak kesamaan: semua mobil memiliki modelnya nama, tahun pembuatan, ukuran mesin, kecepatan maksimum, dll. (belum lagi fakta bahwa semuanya memiliki kesamaan roda dan bagian lain). Dalam situasi ini, Anda dapat:
Warisan
Jadi, apa itu warisan?
- Buat bidang ini di setiap kelas (menambahkannya ke setiap kelas mobil baru saat Anda membuatnya)
- Bawa bidang yang umum untuk semua mobil ke dalam
Car
kelas induk, lalu gunakan kata kunci meluas untuk mendapatkan semua kelas untuk jenis mobil tertentu dariCar
kelas tersebut.
public class Car {
private String model;
private int maxSpeed;
private int yearOfManufacture;
public Car(String model, int maxSpeed, int yearOfManufacture) {
this.model = model;
this.maxSpeed = maxSpeed;
this.yearOfManufacture = yearOfManufacture;
}
}
public class Truck extends Car {
public Truck(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
public class Sedan extends Car {
public Sedan(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
Minimal, kami menghindari duplikasi kode yang tidak perlu (dan kami harus selalu mengusahakannya saat menulis program). Selain itu, kami memiliki struktur kelas yang sederhana dan mudah dipahami, dengan semua bidang umum untuk semua mobil dikonsolidasikan ke dalam satu kelas. Jika truk memiliki bidang khusus yang tidak dimiliki mobil lain, mereka dapat dideklarasikan di kelas Truck
. Hal yang sama berlaku untuk metode. Semua mobil memiliki perilaku umum tertentu yang dapat dijelaskan dengan metode, misalnya menyalakan mobil, mempercepat/mengerem, dll. Metode umum ini dapat dikonsolidasikan ke dalam kelas induk Car
, dan setiap jenis mobil tertentu dapat menentukan tindakan uniknya di kelas turunannya .
public class Car {
public void gas() {
// Accelerate
}
public void brake() {
// Brake
}
}
public class F1Car extends Car {
public void pitStop() {
// Only race cars make pit stops
}
public static void main(String[] args) {
F1Car formula1Car = new F1Car();
formula1Car.gas();
formula1Car.pitStop();
formula1Car.brake();
}
}
Kami menambahkan metode umum untuk semua mobil ke kelas Car
. Tapi, lihat kelasnya F1Car
, yang merepresentasikan mobil balap "Formula 1". Pit stop (berhenti untuk perawatan mobil yang mendesak) hanya dilakukan dalam balapan, jadi kami menambahkan fungsionalitas khusus ini ke kelas turunan yang relevan. 
operator instanceof
Di Jawa, ada operator khusus, instanceof , untuk memeriksa apakah suatu objek dibuat berdasarkan kelas tertentu. Itu mengembalikan benar atau salah tergantung pada hasil cek. Mari kita lihat cara kerjanya menggunakan kelas dalam contoh mobil kita:
public class Truck extends Car {
public static void main(String[] args) {
Truck truck = new Truck();
System.out.println(truck instanceof Car);
}
}
Output: true Operator instanceof
mengembalikan true , karena kita memiliki Truck
objek, dan semua truk adalah mobil. Kelas Truck
berasal dari Car
kelas. Semua truk dibuat berdasarkan kesamaan induk, kelas Car
. Perhatikan baik-baik bagaimana instanceof
operator digunakan. Anda menulisnya tanpa tanda titik, karena ini adalah operator, bukan metode ("object instanceof Class"). Mari kita coba cara lain:
public static void main(String[] args) {
Car car = new Car();
System.out.println(car instanceof Truck);
}
Output: false Kelas Car
(dan objek mobil) tidak berasal dari Truck
kelas. Semua truk adalah mobil, tetapi tidak semua mobil adalah truk. Car
objek tidak didasarkan pada Truck
kelas. Satu contoh lagi:
public static void main(String[] args) {
Car car = new Car();
Truck truck = new Truck();
System.out.println(car instanceof Object && truck instanceof Object);
}
Keluaran: Benar Di sini logikanya juga sederhana: semua kelas di Java, termasuk kelas yang Anda buat, diturunkan dari Object
kelas tersebut (walaupun Anda tidak menulis "extends Object"—itu sudah tersirat). Bagaimana dan kapan ini akan berguna? Operator instanceof
paling sering digunakan saat mengganti equals()
metode. Misalnya, inilah cara equals
penerapan metode di String
kelas:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
Sebelum membandingkan a String
dengan objek yang diteruskan, metode menguji untuk melihat apakah objek tersebut bahkan berupa string? Baru setelah itu mulai membandingkan properti kedua objek. Jika pengujian ini tidak ada, objek apa pun dengan bidang nilai dan panjang dapat diteruskan ke metode dan dibandingkan dengan String, yang tentu saja salah.
Lebih banyak membaca: |
---|
GO TO FULL VERSION