Hi! Ing wulangan sadurunge, kita wis ngerti babagan konsep warisan. Dina iki, kita bakal ndemek topik iki maneh, nanging maneh ora jero banget. Kita isih bakal duwe pelajaran sing luwih rinci babagan iki ing mangsa ngarep. Dina iki kita bakal nliti sawetara conto praktis lan kenalan karo operator sing menarik ing Jawa.
pusaka
Dadi, apa warisan? Warisan minangka mekanisme pemrograman (kalebu ing Jawa) sing ngidini sampeyan ngumumake kelas anyar adhedhasar kelas sing wis ana. Kelas sing diturunake banjur entuk akses menyang lapangan lan metode kelas induk. Napa kita butuh iki? Bayangake sampeyan kudu nggawe sawetara kelas mobil ing program: Truk, RaceCar, Sedan, Pickup, lsp. jeneng, taun Pabrik, ukuran engine, kacepetan maksimum, etc. Ing kahanan iki, sampeyan bisa:- Gawe kolom kasebut ing saben kelas (nambahake menyang saben kelas mobil anyar nalika sampeyan nggawe)
- Nggawa lapangan umum kanggo kabeh mobil menyang
Car
kelas induk, lan banjur nggunakake tembung kunci ngluwihi kanggo nurunake kabeh kelas kanggo jinis tartamtu saka mobil sakaCar
kelas.
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);
}
}
Paling ora, kita ngindhari duplikasi kode sing ora perlu (lan kita kudu tansah ngupayakake nalika nulis program). Kajaba iku, kita duwe struktur kelas sing prasaja lan bisa dingerteni, kanthi kabeh lapangan sing umum kanggo kabeh mobil digabung dadi siji kelas. Yen truk duwe lapangan khusus sing ora diduweni dening mobil liyane, bisa diumumake ing Truck
kelas kasebut. Padha dadi kanggo cara. Kabeh mobil duwe prilaku umum tartamtu sing bisa diterangake kanthi cara, contone, miwiti mobil, akselerasi / rem, lan sapiturute Car
. .
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();
}
}
Kita nambahake cara sing umum kanggo kabeh mobil ing Car
kelas kasebut. Nanging, deleng F1Car
kelas, sing nggambarake mobil balap "Formula 1". Pit mandeg (mandheg kanggo pangopènan mobil urgent) mung rampung ing balapan, supaya kita nambah fungsi tartamtu iki kanggo kelas asalé cocog.
contone operator
Ing Jawa, ana operator khusus, instanceof , kanggo mriksa apa obyek digawe adhedhasar kelas tartamtu. Ngasilake bener utawa salah gumantung saka asil mriksa. Ayo ndeleng cara kerjane nggunakake kelas ing conto mobil:
public class Truck extends Car {
public static void main(String[] args) {
Truck truck = new Truck();
System.out.println(truck instanceof Car);
}
}
Output: bener Operator instanceof
bali bener , awit kita duwe Truck
obyek, lan kabeh truk mobil. Kelas kasebut Truck
asale saka Car
kelas. Kabeh truk digawe adhedhasar induk umum, Car
kelas. Deleng kanthi rapet carane instanceof
operator digunakake. Sampeyan nulis tanpa titik, amarga iku operator, dudu metode ("objek instanceof Class"). Ayo coba cara liya:
public static void main(String[] args) {
Car car = new Car();
System.out.println(car instanceof Truck);
}
Output: palsu Kelas Car
(lan obyek mobil) ora asalé saka Truck
kelas. Kabeh truk iku mobil, nanging ora kabeh mobil iku truk. Car
obyek ora adhedhasar kelas Truck
. Conto liyane:
public static void main(String[] args) {
Car car = new Car();
Truck truck = new Truck();
System.out.println(car instanceof Object && truck instanceof Object);
}
Output: True Ing kene logika uga prasaja: kabeh kelas ing Jawa, kalebu kelas sing digawe, mudhun saka kelas Object
(sanajan sampeyan ora nulis "Ngluwihi Obyek" - wis diwenehake). Kepiye lan kapan iki bakal migunani? Operator instanceof
paling umum digunakake nalika overriding equals()
cara. Contone, mangkene carane equals
metode kasebut ditindakake ing 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;
}
Sadurunge mbandhingaké a String
kanggo obyek liwati, cara tes kanggo ndeleng apa obyek malah senar? Mung banjur wiwit mbandhingake sifat loro obyek. Yen tes iki ora ana, obyek apa wae kanthi kolom nilai lan dawa bisa diterusake menyang metode kasebut lan dibandhingake karo String, sing mesthi salah.
GO TO FULL VERSION