JavaRush /Blog Jawa /Random-JV /instanceof lan dhasar warisan

instanceof lan dhasar warisan

Diterbitake ing grup
Hello! Ing ceramah sadurunge, kita wis sedhela nemu konsep warisan kaping pirang-pirang. Dina iki kita uga bakal ndemek topik iki, nanging uga ora jero banget. Bakal ana ceramah sing rinci babagan iki mengko, nanging dina iki kita bakal ndeleng conto praktis lan kenalan karo operator sing menarik ing Jawa.

Pusaka Jawa

Dadi, apa sejatine warisan? instanceof lan dhasar warisan - 1Warisan minangka mekanisme ing program, kalebu Jawa, sing ngidini sampeyan njlèntrèhaké kelas anyar adhedhasar kelas sing wis ana. Kelas turunan banjur entuk akses menyang lapangan lan metode kelas induk. Yagene iki perlu? Contone, mbayangno sampeyan kudu nggawe sawetara kelas mobil ing program: Truk, Racing, Sedan, Pickup, etc. Sanajan ora miwiti nulis kode, sampeyan ngerti manawa kelas kasebut duwe akeh sing padha: kabeh mobil duwe jeneng model, taun pabrik, ukuran mesin, kacepetan maksimal, lsp. (ora kanggo sebutno kasunyatan sing kabeh duwe gembong lan bagean liyane). Ing kahanan kaya mengkono, sampeyan bisa:
  • Gawe lapangan iki ing saben kelas lan tambahake menyang kelas mobil anyar nalika digawe
  • Pindhah kolom sing umum kanggo kabeh mesin menyang kelas induk Car, lan kabeh kelas jinis mesin tartamtu entuk warisan saka Carnggunakake tembung extends .
Pilihan kapindho, mesthi, 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 wis nyingkiri duplikasi kode sing ora perlu, lan iki minangka perkara sing kudu ditindakake nalika nulis program. Kajaba iku, kita duwe struktur kelas prasaja lan dingerteni: lapangan umum kanggo kabeh mesin diselehake ing siji kelas. Yen, contone, truk duwe sawetara kothak tartamtu sing mobil liyane ora, padha bisa ngumumaké ing Truck. Padha dadi kanggo cara. Kabeh mobil duwe sawetara prilaku umum sing bisa diterangake: miwiti mobil, gas / brake, etc. Cara umum iki bisa dilebokake ing kelas umum Car, lan prilaku spesifik saben jinis tartamtu bisa diterangake ing kelas turunan.
public class Car {

   public void gas() {
       //...gas
   }

   public void brake() {
       //...brake
   }
}


public class F1Car extends Car {

   public void pitStop() {

       //...only racing cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Kita wis mindhah cara umum kabeh mobil menyang kelas Car. Nanging ing kelas penerus F1Car, kang njlèntrèhaké mobil balap Formula 1 - pit mandeg (mandheg kanggo pangopènan urgent mobil), kang rampung mung ing racing lan dibedakake dening prilaku tartamtu.

Java instanceof operator

Kanggo mriksa apa obyek digawe adhedhasar kelas, ana operator khusus ing Jawa - instanceof. Iki ngasilake nilai trueyen tes kasebut bener, utawa falseyen asile salah. Ayo ndeleng cara kerjane nggunakake kelas mobil minangka conto:
public class Truck extends Car {

   public static void main(String[] args) {

       Truck truck = new Truck();
       System.out.println(truck instanceof Car);
   }
}
Output: bener Testing nggunakake operator instanceofbali true, awit kita duwe obyek saka kelas Truck, lan kabeh trek mobil. Kelas kasebut Truckminangka turunan saka kelas Car, mula kabeh truk digawe adhedhasar wong tuwa sing umum - mobil. Pay manungsa waé menyang operator instanceof: ditulis tanpa titik, awit iku operator, dudu cara ("obyek instanceof Class"). Ayo nyoba kanthi cara sing beda:
public static void main(String[] args) {

   Car car = new Car();
   System.out.println(car instanceof Truck);
}
Output: palsu Kelas Carlan, kanthi mangkono, obyek kasebut ora diturunake saka kelas Truck.Kabeh truk minangka mobil, nanging ora kabeh mobil minangka truk. Obyek Carora digawe 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 Logika kene uga prasaja: kabeh kelas ing Jawa, kalebu sing digawe, asalé saka kelas Object(sanajan sampeyan ora nulis ngluwihi Obyek ing wong - mekanisme iki implisit ing wong). Yagene iki bisa migunani lan ing kahanan apa? Panggunaan operator sing paling umum instanceofyaiku minangka metode override equals(). Contone, ing ngisor iki carane metode kasebut ditindakake equalsing kelas String:
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 mbandhingake senar karo obyek sing dilewati, metode kasebut mriksa: apa obyek sing dilewati bener-bener senar? Lan mung banjur dheweke wiwit mbandhingake sifat saka rong obyek. Tanpa mriksa iki, sampeyan bisa ngliwati sembarang obyek sing nduweni nilai lan dawa kolom menyang cara lan mbandhingaké karo senar, kang, mesthi, bakal salah.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION