JavaRush /Blog Jawa /Random-JV /Kelas abstrak ing Jawa kanthi conto konkrit

Kelas abstrak ing Jawa kanthi conto konkrit

Diterbitake ing grup
Hello! Ing kuliah sadurunge, kita kenal karo antarmuka lan ngerti apa sing dibutuhake. Topik dina iki bakal ana sing padha karo topik sadurunge. Ayo dadi pirembagan bab kelas abstrak ing Jawa. Kelas abstrak ing Jawa kanthi conto konkrit - 1

Kenapa kelas diarani "abstrak"

Sampeyan bisa uga ngelingi apa "abstraksi" - kita wis nutupi :) Yen sampeyan tiba-tiba lali, ora apa-apa, ayo elinga: iki prinsip OOP , miturut sing nalika ngrancang kelas lan nggawe obyek, sampeyan kudu nyorot. mung sifat utama entitas lan mbuwang sing sekunder. Contone, yen kita ngrancang kelas SchoolTeacher- guru sekolah - kita ora mbutuhake karakteristik " dhuwur ". Pancen: kanggo guru karakteristik iki ora penting. Nanging yen kita nggawe kelas ing program BasketballPlayer- pemain basket - dhuwur bakal dadi salah siji saka ciri utama. Dadi, kelas abstrak minangka "kosong" sing paling abstrak, oh-so-approximate kanggo klompok kelas sing bakal teka. Preparation iki ora bisa digunakake ing wangun rampung - iku banget "mentah". Nanging nggambarake negara lan prilaku umum tartamtu sing bakal diduweni kelas mangsa - pewaris kelas abstrak.

Tuladha Kelas Abstrak Jawa

Ayo katon ing 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. Nalika sampeyan bisa ndeleng, boten khusus :) Apa bisa kita kudu iku kanggo? Kaping pisanan, dheweke nggambarake entitas sing kita butuhake kanthi cara sing paling abstrak - mobil. Tembung abstrak ing kene ana alesan. Ora ana "mung mesin" ing donya. Ana truk, mobil balap, sedan, coupe, SUV. Kelas abstrak kita mung minangka "cetak biru" saka ngendi kita bakal nggawe kelas mobil.
public class Sedan extends Car {

   @Override
   public void gas() {
       System.out.println("The sedan accelerates!");
   }

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

}
Iki kaya sing diomongake ing ceramah babagan warisan. Mung ing kana kita duwe kelas Carlan metode sing ora abstrak. Nanging solusi iki nduweni sawetara kekurangan, sing didandani 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!
   }
}
"Tipu" iki ditindakake khusus dening pangripta Jawa. Sepisan maneh, mung kanggo ngelingi: kelas abstrak mung minangka cithak biru kanggo kelas "normal" ing mangsa ngarep . Sampeyan ora perlu salinan gambar, ta? Dadi ora perlu nggawe conto kelas abstrak :) Lan yen kelas kasebut Carora abstrak, kita bisa nggawe obyek kanthi gampang:
public class Car {

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

   public void gas() {
       // some logic
   }

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


public class Main {

   public static void main(String[] args) {

       Car car = new Car(); // Everything is OK, the machine has been created
   }
}
Saiki kita duwe sawetara jinis mobil sing ora bisa dingerteni ing program kita - dudu truk, dudu mobil balap, dudu sedan, nanging umume. Sing padha "mung mesin" sing ora ana ing alam. Conto sing padha bisa diwenehake karo kewan. Bayangake yen obyek katon ing program sampeyan Animal- " mung kewan ". Jinis apa, kulawarga apa, apa ciri-cirine ora jelas. Iku bakal aneh kanggo ndeleng wong ing program. Ora ana "mung kewan" ing alam. Mung asu, kucing, rubah, mol lan liya-liyane. Kelas abstrak mbebasake kita saka " mung obyek ". Padha menehi kita negara dhasar lan prilaku. Contone, kabeh mobil kudu duwe model , werna lan kacepetan maksimum , lan uga kudu bisa bensin lan rem . Mekaten. Iki minangka skema abstrak umum, mula sampeyan dhewe ngrancang kelas sing sampeyan butuhake. Wigati dimangerteni: rong cara ing kelas abstrak uga ditetepake minangka abstrak , lan ora ditindakake. Alesane padha: kelas abstrak ora nggawe "prilaku standar" kanggo "mesin mung". Dheweke mung ujar manawa kudu bisa nggawe kabeh mobil. Nanging, yen sampeyan isih mbutuhake 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("Let's go!");
   }

   public abstract void brake();

   //getters and setters
}


public class Sedan extends Car {

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

}

public class Main {

   public static void main(String[] args) {

       Sedan sedan = new Sedan();
       sedan.gas();
   }
}
Output konsol: "Entuk nyepetake!" Nalika sampeyan bisa ndeleng, kita dipun ginakaken siji cara ing kelas abstrak, nanging ora ngleksanakake kaloro. Akibaté, prilaku kelas kita Sedandipérang dadi rong bagéan: yen sampeyan nelpon cara ing gas(), iku bakal "narik munggah" saka kelas abstrak tiyang sepah Car, lan brake()kita redefined cara ing kelas Sedan. Ternyata trep banget lan fleksibel. Nanging saiki kelas kita ora abstrak ? Sawise kabeh, ing kasunyatan, setengah saka cara kang dileksanakake. Nyatane - lan iki minangka fitur sing penting banget - kelas kasebut abstrak yen paling ora salah sawijining metode abstrak . Paling ora siji saka loro, paling ora siji saka sewu cara - ora masalah. Kita malah bisa ngetrapake kabeh cara lan ora ninggalake sing abstrak. Bakal ana kelas abstrak tanpa metode abstrak. Ing asas, iki bisa, lan compiler ora bakal gawé kasalahan, nanging luwih apik ora kanggo nindakake iki: tembung abstrak bakal kelangan makna, lan kanca-kanca programer bakal kaget banget kanggo ndeleng iki : / Kajaba iku, yen cara ditandhani nganggo tembung abstrak, saben kelas turunan kudu ngleksanakake utawa diumumake abstrak. Yen ora, kompiler bakal nggawe kesalahan . Mesthi wae, saben kelas bisa entuk warisan mung saka siji kelas abstrak, mula ing babagan warisan ora ana bedane antarane kelas abstrak lan biasa. Ora preduli manawa kita entuk warisan saka kelas abstrak utawa saka kelas biasa, mung ana siji kelas induk.

Apa sebabe ora ana warisan kelas pirang-pirang ing Jawa?

Kita wis ujar manawa ora ana pirang-pirang pusaka ing Jawa, nanging kita durung ngerti sebabe. Ayo nyoba iki saiki. Intine yen Jawa duwe warisan pirang-pirang, kelas bocah ora bakal bisa mutusake prilaku sing kudu dipilih. Ayo kita duwe rong kelas - Tosterlan NuclearBomb:
public class Toster {


 public void on() {

       System.out.println("The toaster is on, the toast is getting ready!");
   }

   public void off() {

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


public class NuclearBomb {

   public void on() {

       System.out.println("Взрыв!");
   }
}
Kaya sing sampeyan ngerteni, loro-lorone duwe metode on(). Ing cilik saka toaster, iku wiwit masak roti panggang, lan ing cilik saka bom nuklir, iku nimbulaké bledosan. Oh : / Saiki mbayangno yen sampeyan mutusake (aku ora ngerti kenapa dumadakan!) Kanggo nggawe sing ana ing antarane. Lan iki kelasmu - MysteriousDevice! Kode iki, mesthi, ora bisa digunakake, lan kita nampilake mung minangka conto "kepiye 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 a toast, or a nuclear apocalypse?
   }
}
Ayo ndeleng apa sing entuk. Piranti misterius kasebut asale saka Toaster lan Bom Nuklir. Loro-lorone duwe metode on(), lan minangka asil, ora jelas cara sing on()kudu diobong ing obyek kasebut MysteriousDeviceyen diarani. Obyek ora bakal bisa ngerti iki. Inggih, minangka ceri ing kue: Bom Nuklir ora duwe cara off(), dadi yen kita salah guess, ora bakal ana cara kanggo mateni piranti kasebut. Kelas abstrak ing Jawa kanthi conto konkrit - 2 Amarga kebingungan iki, nalika obyek ora jelas prilaku sing kudu dipilih, para pangripta Jawa ninggal warisan pirang-pirang. Nanging, sampeyan elinga yen kelas Java ngleksanakake akeh antarmuka. Miturut cara, sampeyan wis nemoni paling ora siji kelas abstrak ing pasinaon! Senajan, mungkin aku ora ngerteni :)
public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>
Iki kelas kanca lawasmu Calendar. Iku abstrak lan duwe sawetara ahli waris. Salah sijine yaiku GregorianCalendar. Sampeyan wis digunakake ing pawulangan babagan tanggal :) Kabeh katon cetha, mung ana siji titik: apa prabédan dhasar antarane kelas abstrak lan antarmuka ? Yagene padha nambahake loro ing Jawa, lan ora mbatesi mung siji? Iki bisa uga cukup. Kita bakal ngrembug babagan iki ing kuliah sabanjure! Sampai jumpa :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION