Animal
(kewan):
public class Animal {
String name;
int age;
}
Kita bisa nggawe kanggo, contone, 2 kelas turunan - Cat
lan Dog
. Iki ditindakake kanthi nggunakake tembung kunci extends
.
public class Cat extends Animal {
}
public class Dog extends Animal {
}
Iki bisa uga migunani kanggo kita ing mangsa ngarep. Contone, yen tugas kanggo nyekel clurut, kita bakal nggawe obyek ing program Cat
. Yen tugas kanggo mbukak sawise kelet, banjur kita nggunakake obyek Dog
. Lan yen kita nggawe program sing simulates Clinic Veterinary, iku bakal bisa karo kelas Animal
(kanggo bisa nambani loro kucing lan asu). Penting banget kanggo elinga ing mangsa ngarep yen nalika nggawe obyek, konstruktor kelas dhasar diarani pisanan , lan mung banjur konstruktor kelas kasebut dhewe, obyek sing digawe, diarani. Yaiku, nalika nggawe obyek, Cat
konstruktor kelas bakal digunakake dhisik Animal
, lan mung konstruktor Cat
. Kanggo mesthekake iki, ayo nambah konstruktor Cat
lan Animal
output menyang console.
public class Animal {
public Animal() {
System.out.println("Animal constructor completed");
}
}
public class Cat extends Animal {
public Cat() {
System.out.println("The constructor Cat worked!");
}
public static void main(String[] args) {
Cat cat = new Cat();
}
}
Output konsol:
Отработал конструктор Animal
Отработал конструктор Cat!
Pancen, iki cara kerjane! Kanggo apa? Contone, supaya ora duplikat lapangan umum saka rong kelas. Contone, saben kewan duwe jantung lan otak, nanging ora saben kewan duwe buntut. Kita bisa nyatakake lapangan umum kanggo kabeh kewan brain
ing heart
kelas induk Animal
, lan lapangan tail
ing subclass Cat
. Saiki kita bakal nggawe konstruktor kanggo kelas Cat
, ing ngendi kita bakal ngliwati kabeh 3 lapangan.
public class Cat extends Animal {
String tail;
public Cat(String brain, String heart, String tail) {
this.brain = brain;
this.heart = heart;
this.tail = tail;
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
Pay manungsa waé:konstruktor bisa sukses, sanajan kelas Cat
ora duwe lapangan brain
lan heart
. Kolom kasebut "ditarik" saka kelas dhasar Animal
. Kelas turunan nduweni akses menyang lapangan kelas dasar, saengga Cat
bisa katon ing kelas kita. Mulane, kita ora perlu Cat
duplikat kolom kasebut ing kelas - kita bisa njupuk saka kelas Animal
. Menapa malih, kita bisa kanthi tegas nyebut konstruktor kelas dasar ing konstruktor kelas turunan. Kelas dhasar uga disebut " superclass ," mulane Jawa nggunakake tembung kunci super
. Ing conto sadurunge
public Cat(String brain, String heart, String tail) {
this.brain = brain;
this.heart = heart;
this.tail = tail;
}
Kita nemtokake saben lapangan kanthi kapisah sing ana ing kelas induk. Nyatane, sampeyan ora kudu nindakake iki. Cukup nelpon konstruktor kelas induk lan pass paramèter sing dibutuhake:
public class Animal {
String brain;
String heart;
public Animal(String brain, String heart) {
this.brain = brain;
this.heart = heart;
}
public class Cat extends Animal {
String tail;
public Cat(String brain, String heart, String tail) {
super(brain, heart);
this.tail = tail;
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
Ing konstruktor, Cat
kita disebut konstruktor Animal
lan ngliwati rong lapangan kasebut. Kita mung kudu miwiti kanthi tegas siji lapangan - tail
sing Animal
ora ana. Elinga carane kita ngomong yen obyek digawe, konstruktor kelas induk diarani pisanan? Dadi, mulane tembung kasebut super()
kudu dadi luwih dhisik ing konstruktor! Yen ora, logika konstruktor bakal rusak lan program bakal ngasilake kesalahan.
public class Cat extends Animal {
String tail;
public Cat(String brain, String heart, String tail) {
this.tail = tail;
super(brain, heart);//error!
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
Compiler ngerti yen nalika nggawe obyek saka kelas turunan, konstruktor kelas dhasar diarani pisanan. Lan yen sampeyan nyoba ngganti prilaku iki kanthi manual, ora bakal ngidini.
Proses nggawe obyek.
Ndhuwur kita katon ing conto karo basa lan tiyang sepah kelas -Animal
lan Cat
. Saiki, nggunakake rong kelas kasebut minangka conto, kita bakal ndeleng proses nggawe obyek lan miwiti variabel. Kita ngerti yen variabel statis lan variabel instance (non-statis). Kita uga ngerti yen kelas dhasar Animal
duwe variabel dhewe, lan kelas turunan Cat
duwe dhewe. Ayo nambah siji variabel statis menyang kelas kanggo Animal
kajelasan . Cat
Variabel animalCount
kelas Animal
yaiku jumlah total spesies kewan ing bumi, lan variabel kasebut catsCount
yaiku jumlah spesies kucing. Kajaba iku, kita bakal nemtokake nilai wiwitan kanggo kabeh variabel non-statis saka loro kelas (sing bakal diganti ing konstruktor).
public class Animal {
String brain = "The initial value of brain in the Animal class";
String heart = "The initial value of heart in the Animal class";
public static int animalCount = 7700000;
public Animal(String brain, String heart) {
System.out.println("The constructor of the Animal base class is being executed");
System.out.println("Have the variables of the Animal class already been initialized?");
System.out.println("The current value of the static variable animalCount = " + animalCount);
System.out.println("Current value of brain in class Animal = " + this.brain);
System.out.println("Current value of heart in class Animal = " + this.heart);
System.out.println("Have the variables of the Cat class already been initialized?");
System.out.println("The current value of the static variable catsCount = " + Cat.catsCount);
this.brain = brain;
this.heart = heart;
System.out.println("Animal base class constructor completed!");
System.out.println("Current value of brain = " + this.brain);
System.out.println("Current value of heart = " + this.heart);
}
}
public class Cat extends Animal {
String tail = "The initial value of tail in the Cat class";
static int catsCount = 37;
public Cat(String brain, String heart, String tail) {
super(brain, heart);
System.out.println("The constructor of the Cat class has started (the Animal constructor has already been executed)");
System.out.println("The current value of the static variable catsCount = " + catsCount);
System.out.println("Current value tail = " + this.tail);
this.tail = tail;
System.out.println("Current value tail = " + this.tail);
}
public static void main(String[] args) {
Cat cat = new Cat("Brain", "Heart", "Tail");
}
}
Dadi, kita nggawe obyek anyar saka kelas Cat
sing diwarisake saka Animal
. Ayo nambah output console rinci kanggo program kita kanggo ndeleng apa sing bakal kelakon lan ing urutan apa. Iki bakal dadi output menyang konsol minangka asil nggawe obyek Cat
:
Выполняется конструктор базового класса Animal
Были ли уже проинициализированы переменные класса Animal?
Текущее meaning статической переменной animalCount = 7700000
Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal
Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
Были ли уже проинициализированы переменные класса Cat?
Текущее meaning статической переменной catsCount = 37
Конструктор базового класса Animal завершил работу!
Текущее meaning brain = Мозг
Текущее meaning heart = Сердце
Конструктор класса Cat начал работу (конструктор Animal уже был выполнен)
Текущее meaning статической переменной catsCount = 37
Текущее meaning tail = Изначальное meaning tail в классе Cat
Текущее meaning tail = Хвост
Dadi, saiki kita bisa ndeleng kanthi jelas apa variabel urutan sing diinisialisasi lan konstruktor diarani nalika nggawe obyek anyar:
-
Variabel statis saka kelas dhasar ( ) diinisialisasi
Animal
. Ing kasus kita, variabelanimalCount
kelasAnimal
diwenehi nilai 7700000. -
Variabel statis saka kelas turunan ( ) diinisialisasi
Cat
. Pay manungsa waé - kita isih ana ing konstruktorAnimal
, lan console wis ngandika:Выполняется конструктор базового класса Animal Были ли уже проинициализированы переменные класса Animal? Текущее meaning статической переменной animalCount = 7700000 Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal Были ли уже проинициализированы переменные класса Cat? Текущее meaning статической переменной catsCount = 37
-
Sabanjure, variabel non-statis saka kelas dasar diinisialisasi . Kita khusus menehi nilai awal, sing banjur diganti dadi anyar ing konstruktor. Konstruktor
Animal
durung ngrampungake karyane, nanging nilai awalbrain
wisheart
ditugasake:Выполняется конструктор базового класса Animal Были ли уже проинициализированы переменные класса Animal? Текущее meaning статической переменной animalCount = 7700000 Текущее meaning brain в классе Animal = Изначальное meaning brain в классе Animal Текущее meaning heart в классе Animal = Изначальное meaning heart в классе Animal
-
Konstruktor kelas dhasar wiwit bisa digunakake .
Kita wis weruh yen tahap iki mung kaping papat berturut-turut: ing telung poin pisanan, nalika konstruktor wiwit kerja,
Animal
akeh variabel sing wis diwenehi nilai. -
Miwiti kolom non-statis saka kelas anak (
Cat
).Iki kedadeyan sadurunge desainer
Cat
wiwit kerja.Nalika dheweke wiwit kerja, variabel kasebut
tail
wis duwe nilai:Конструктор класса Cat начал работу (конструктор Animal уже был выполнен) Текущее meaning статической переменной catsCount = 37 Текущее meaning tail = Изначальное meaning tail в классе Cat
-
Konstruktor kelas turunan diarani
Cat
GO TO FULL VERSION