Hi! Ayo dadi pirembagan bab kelas abstrak ing Jawa.Conto konkrit kelas abstrak ing basa Jawa - 1

Kenapa kelas diarani "abstrak"?

Sampeyan mbokmenawa ngelingi apa abstraksi — kita rembugan sadurunge :) Yen sampeyan kelalen, ora kuwatir. Elinga, minangka prinsip OOP sing ujar, nalika ngrancang kelas lan nggawe obyek, sampeyan mung kudu makili sifat utama entitas lan mbuwang sing sekunder. Contone, yen kita ngrancang SchoolTeacherkelas, dhuwur mbokmenawa ora dadi properti sing dibutuhake saka guru. Pancen, karakteristik iki ora penting kanggo guru. Nanging yen kita nggawe BasketballPlayerkelas, mula dhuwur bakal dadi salah sawijining ciri sing paling penting. Inggih, kelas abstrakiku paling abstrak, "workpiece kasar" kanggo klompok kelas mangsa. Workpiece ora bisa digunakake langsung - iku banget "kasar". Nanging nemtokake negara karakteristik tartamtu lan prilaku sing kelas mangsa - katurunan saka kelas abstrak - bakal duwe.

Tuladha kelas abstrak ing basa Jawa

Coba conto prasaja karo mobil:

public abstract class Car {

   private String model;
   private String color;
   private int maxSpeed;
  
   public abstract void gas();

   public abstract void brake();

   public String getModel() {
       return model;
   }

   public void setModel(String model) {
       this.model = model;
   }

   public String getColor() {
       return color;
   }

   public void setColor(String color) {
       this.color = color;
   }

   public int getMaxSpeed() {
       return maxSpeed;
   }

   public void setMaxSpeed(int maxSpeed) {
       this.maxSpeed = maxSpeed;
   }
}
Iki minangka kelas abstrak sing paling gampang. Kaya sing sampeyan ngerteni, ora ana sing khusus :) Napa kita butuh iki? Kaping pisanan, menehi katrangan paling abstrak babagan entitas sing kita butuhake - mobil. Tembung kunci abstrak tegese ana ing kene. Ing donya nyata, ora ana sing diarani "mung mobil". Ana truk, mobil balap, sedan, coupe, lan SUV. Kelas abstrak kita mung minangka "cetak biru" sing bakal digunakake kanggo nggawe kelas mobil tartamtu.

public class Sedan extends Car {
  
   @Override
   public void gas() {
       System.out.println("The sedan is accelerating!");
   }

   @Override
   public void brake() {
       System.out.println("The sedan is slowing down!");
   }
  
}
Ing pirang-pirang cara, iki padha karo sing kita rembugan ing piwulangan babagan warisan. Mung ing kasus kasebut, kita duwe Carkelas sing cara ora abstrak. Nanging solusi kasebut duwe sawetara kekurangan sing tetep ing kelas abstrak. Kaping pisanan, conto kelas abstrak ora bisa digawe:

public class Main {

   public static void main(String[] args) {

       Car car = new Car(); // Error! The Car class is abstract!
   }
}
Pangripta Jawa nggawe "fitur" iki kanthi sengaja. Sepisan maneh, elinga: kelas abstrak mung minangka cithak biru kanggo kelas "biasa" ing mangsa ngarep . Sampeyan ora butuh salinan cithak biru, ta? Kajaba iku, ora perlu nggawe conto kelas abstrak :) Lan yen Carkelas kasebut ora abstrak, mula kita bisa nggawe conto kasebut kanthi gampang:

public class Car {

   private String model;
   private String color;
   private int maxSpeed;
  
   public void go() {
       // ...some logic
   }

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


public class Main {

   public static void main(String[] args) {

       Car car = new Car(); // This is okay. The car is created.
   }
}
Saiki, program kita duwe sawetara jinis mobil sing ora bisa dingerteni. Iku dudu truk, dudu mobil balap, lan dudu sedan, nanging ora jelas apa iku. Iku "mung mobil" sing ora ana ing kasunyatan. Conto sing padha bisa diwenehake karo kewan. Bayangake yen program sampeyan duwe Animalobyek (" mung kewan "). Ora jelas apa jenise, kulawarga apa, utawa ciri apa. Iku bakal aneh kanggo ndeleng siji ing program. Ora ana "mung kewan" ing alam. Mung asu, kucing, rubah, moles, etc. Abstrak kelas nyimpen kita saka " mung obyek ". Dheweke menehi kita status lan prilaku dhasar. Contone, kabeh mobil kudu model , werna lan kacepetan dhuwur, lan dheweke uga kudu bisa ngetrapake gas lan rem . Mekaten. Iku cithak biru abstrak umum sing bakal digunakake mengko kanggo ngrancang kelas sing sampeyan butuhake. Cathetan: rong cara ing kelas abstrak uga abstrak , tegese ora ana implementasine. Alesane padha: kelas abstrak ora nggawe "prilaku standar" kanggo "mung mobil". Dheweke mung nuduhake apa sing kudu ditindakake saben mobil. Sing jarene, yen sampeyan butuh prilaku standar, sampeyan bisa ngetrapake metode ing kelas abstrak. Jawa ora nglarang iki:

public abstract class Car {

   private String model;
   private String color;
   private int maxSpeed;

   public void gas() {
       System.out.println("Accelerating!");
   }

   public abstract void brake();
  
   // Getters and setters
}


public class Sedan extends Car {

   @Override
   public void brake() {
       System.out.println("The sedan is slowing down!");
   }

}

public class Main {

   public static void main(String[] args) {

       Sedan sedan = new Sedan();
       sedan.gas();
   }
}
Output konsol:
Accelerating!
Nalika sampeyan bisa ndeleng, kita dipun ginakaken siji cara ing kelas abstrak, nanging ora liyane. Akibaté, prilaku Sedankelas kita dipérang dadi rong bagéan: yen kita nelpon gas()cara sawijining, prilaku "ditarik munggah" saka Carkelas induk abstrak, lan kita ngleksanakake brake()cara ing Sedankelas. Sing super trep lan fleksibel. Nanging kelas kita saiki ora abstrak, ta ? Sawise kabeh, iku bener dileksanakake setengah saka cara. Kasunyatane - lan iki minangka fitur sing penting banget - kelas kasebut abstrak yen salah sawijining metode kasebut abstrak. Siji cara loro, utawa siji saka sewu - ora masalah. Kita malah bisa ngleksanakake kabeh cara, ora ninggalake abstrak. Asil bakal dadi kelas abstrak tanpa metode abstrak. Iki bisa ditindakake kanthi prinsip — kompiler ora bakal nggawe kesalahan — nanging luwih becik ora nindakake iki, amarga ngilangi tembung abstrak saka maknane. Rekan-rekan programer sampeyan uga bakal kaget banget ndeleng iki: / Sing jarene, yen metode ditandhani minangka abstrak, saben kelas turunan kudu ngetrapake utawa diumumake minangka abstrak. Yen ora, compiler bakal mbuwang kesalahan. Mesthi wae, saben kelas mung bisa marisi siji kelas abstrak, mula ora ana bedane antarane kelas abstrak lan kelas biasa ing babagan warisan. Ora preduli yen kita marisi kelas abstrak utawa kelas biasa — mung ana siji kelas induk.

Napa Jawa ora duwe warisan kelas pirang-pirang

Kita wis ngomong yen ing Jawa ora ana pirang-pirang pusaka, nanging kita ora ngerti apa sebabe. Ayo dadi nyoba kanggo nindakake iku saiki. Kasunyatane, yen Jawa duwe warisan pirang-pirang, mula kelas bocah ora bakal bisa mutusake prilaku sing kudu dipilih. Ayo kita duwe rong kelas: Toasterlan NuclearBomb:

public class Toaster {
  
  
 public void on() {

       System.out.println("The toaster is on. We're toasting!");
   }
  
   public void off() {

       System.out.println("The toaster is off!");
   }
}


public class NuclearBomb {

   public void on() {

       System.out.println("Boom!");
   }
}
Nalika sampeyan bisa ndeleng, loro kelas duwe on()cara. Kanggo pemanggang roti, cara kasebut wiwit nggawe roti panggang, nanging ing kasus bom nuklir, iku nyebabake bledosan. Uh-oh : / Saiki bayangake yen sampeyan wis mutusake (aja takon aku kenapa!) nggawe apa wae ing antarane. Iki kelasmu MysteriousDevice:! Kode iki ora bakal bisa, mesthi. Kita nampilake mung minangka conto "apa sing bisa dadi":

public class MysteriousDevice extends Toster, NuclearBomb {

   public static void main(String[] args) {
      
       MysteriousDevice mysteriousDevice = new MysteriousDevice();
       mysteriousDevice.on(); // And what should happen here? Will we get toast or a nuclear apocalypse?
   }
}
Ayo ndeleng apa sing kita entuk. Piranti misterius kasebut asale saka Toaster lan Bom Nuklir bebarengan. Loro-lorone duwe on()metode. Akibaté, ora jelas implementasine sing kudu ditindakake yen kita nelpon on()obyek MysteriousDevice. Obyek ora bakal ngerti. Lan ing ndhuwur kabeh, NuclearBomb ora duwe off()metode, dadi yen kita ora ngira kanthi bener, mula ora bisa mateni piranti kasebut. Conto konkrit kelas abstrak ing basa Jawa - 2"Kesalahpahaman" iki, nalika ora jelas prilaku sing kudu ditindakake, mulane para pangripta Jawa nolak warisan pirang-pirang. Sing jarene, sampeyan bakal sinau manawa kelas Jawa bisa ngetrapake akeh antarmuka.