CodeGym /Blog Jawa /Acak /Instanceof lan Warisan ing Jawa
John Squirrels
tingkat
San Francisco

Instanceof lan Warisan ing Jawa

Diterbitake ing grup
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? instanceof lan Warisan 101 - 1 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 Carkelas induk, lan banjur nggunakake tembung kunci ngluwihi kanggo nurunake kabeh kelas kanggo jinis tartamtu saka mobil saka Carkelas.
Alami, pilihan kapindho luwih trep:

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 Truckkelas 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 Carkelas kasebut. Nanging, deleng F1Carkelas, 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. instanceof lan Warisan 101 - 2

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 instanceofbali bener , awit kita duwe Truckobyek, lan kabeh truk mobil. Kelas kasebut Truckasale saka Carkelas. Kabeh truk digawe adhedhasar induk umum, Carkelas. Deleng kanthi rapet carane instanceofoperator 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 Truckkelas. Kabeh truk iku mobil, nanging ora kabeh mobil iku truk. Carobyek 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 instanceofpaling umum digunakake nalika overriding equals()cara. Contone, mangkene carane equalsmetode kasebut ditindakake ing Stringkelas:

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 Stringkanggo 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.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION