java
Dalam tutorial ini, kita akan belajar tentang kata kunci super di Java dengan bantuan contoh.
super
kata kunci di Java digunakan dalam subclass untuk mengakses anggota superclass (atribut, konstruktor, dan metode).
Sebelum kita mempelajari tentang super
kata kunci, pastikan untuk mengetahui tentang pewarisan Java.
Mari kita pahami masing-masing kegunaan ini.
Jika metode dengan nama yang sama didefinisikan di kedua superclass dan subclass, metode di subclass menimpa metode di superclass. Ini disebut penggantian metode.
class Animal {
// overridden method
public void display(){
System.out.println("I am an animal");
}
}
class Dog extends Animal {
// overriding method
@Override
public void display(){
System.out.println("I am a dog");
}
public void printMessage(){
display();
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.printMessage();
}
}
Keluaran
I am a dog
Dalam contoh ini, dengan membuat objek dog1 dari Anjing kelas, kita dapat memanggil metodenya printMessage() yang kemudian mengeksekusi display()
pernyataan.
Sejak display()
didefinisikan di kedua kelas, metode subkelas Anjing menimpa metode superclass Hewan . Oleh karena itu, display()
dari subkelas disebut.
Bagaimana jika metode superclass yang diganti harus dipanggil?
Kami menggunakan super.display()
jika metode yang diganti display()
kelas super Hewan perlu dipanggil.
class Animal {
// overridden method
public void display(){
System.out.println("I am an animal");
}
}
class Dog extends Animal {
// overriding method
@Override
public void display(){
System.out.println("I am a dog");
}
public void printMessage(){
// this calls overriding method
display();
// this calls overridden method
super.display();
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.printMessage();
}
}
Keluaran
I am a dog I am an animal
Berikut cara kerja program di atas.
Superclass dan subclass dapat memiliki atribut dengan nama yang sama. Kami menggunakan super
kata kunci untuk mengakses atribut superclass.
class Animal {
protected String type="animal";
}
class Dog extends Animal {
public String type="mammal";
public void printType() {
System.out.println("I am a " + type);
System.out.println("I am an " + super.type);
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.printType();
}
}
Keluaran :
I am a mammal I am an animal
Dalam contoh ini, kami telah mendefinisikan bidang instance yang sama type di kedua superclass Hewan dan subkelas Anjing .
Kami kemudian membuat objek dog1 dari Anjing kelas. Kemudian, printType()
metode dipanggil menggunakan objek ini.
Di dalam printType()
fungsi,
Oleh karena itu, System.out.println("I am a " + type);
prints
Saya adalah mamalia
. Dan, System.out.println("I am an " + super.type);
mencetak
Saya adalah binatang
.
Seperti yang kita ketahui, ketika sebuah objek kelas dibuat, konstruktor defaultnya secara otomatis dipanggil.
Untuk memanggil konstruktor superclass secara eksplisit dari konstruktor subclass, kita menggunakan super()
. Ini adalah bentuk khusus dari super
kata kunci.
super()
hanya dapat digunakan di dalam konstruktor subkelas dan harus menjadi pernyataan pertama.
class Animal {
// default or no-arg constructor of class Animal
Animal() {
System.out.println("I am an animal");
}
}
class Dog extends Animal {
// default or no-arg constructor of class Dog
Dog() {
// calling default constructor of the superclass
super();
System.out.println("I am a dog");
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
}
}
Keluaran
I am an animal I am a dog
Di sini, ketika sebuah objek dog1 dari Anjing kelas dibuat, secara otomatis memanggil konstruktor default atau tanpa argumen dari kelas tersebut.
Di dalam konstruktor subkelas, super()
pernyataan memanggil konstruktor superclass dan mengeksekusi pernyataan di dalamnya. Oleh karena itu, kita mendapatkan output
Saya adalah binatang
.
Alur program kemudian kembali ke konstruktor subclass dan mengeksekusi pernyataan yang tersisa. Jadi, Saya adalah seekor anjing akan dicetak.
Namun, menggunakan super()
tidak wajib. Meskipun super()
tidak digunakan dalam konstruktor subclass, compiler secara implisit memanggil konstruktor default dari superclass.
Jadi, mengapa menggunakan kode yang berlebihan jika kompilator secara otomatis memanggil super()?
Diperlukan jika konstruktor berparameter (konstruktor yang mengambil argumen) superclass harus dipanggil dari konstruktor subclass.
Parameter super()
harus selalu menjadi pernyataan pertama di badan konstruktor subkelas, jika tidak, kita mendapatkan kesalahan kompilasi.
class Animal {
// default or no-arg constructor
Animal() {
System.out.println("I am an animal");
}
// parameterized constructor
Animal(String type) {
System.out.println("Type: "+type);
}
}
class Dog extends Animal {
// default constructor
Dog() {
// calling parameterized constructor of the superclass
super("Animal");
System.out.println("I am a dog");
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
}
}
Keluaran
Type: Animal I am a dog
Kompiler dapat secara otomatis memanggil konstruktor no-arg. Namun, itu tidak dapat memanggil konstruktor berparameter.
Jika konstruktor berparameter harus dipanggil, kita perlu mendefinisikannya secara eksplisit di konstruktor subkelas.
Perhatikan bahwa dalam contoh di atas, kami secara eksplisit memanggil konstruktor berparameter super("Animal")
. Kompiler tidak memanggil konstruktor default superclass dalam kasus ini.
java
Java LinkedList Dalam tutorial ini, kita akan belajar tentang Java LinkedList secara detail dengan bantuan contoh. LinkedList kelas kerangka koleksi Java menyediakan fungsionalitas struktur data daftar tertaut (daftar tertaut ganda). Setiap elemen dalam daftar tertaut dikenal sebagai simpul . In
Java ArrayDeque Dalam tutorial ini, kita akan belajar tentang kelas ArrayDeque dan metodenya dengan bantuan contoh. Selain itu, kita akan belajar menggunakan deque array untuk mengimplementasikan tumpukan. Di Java, kita bisa menggunakan ArrayDeque class untuk mengimplementasikan struktur data antr
Antrian Pemblokiran Java Dalam tutorial ini, kita akan belajar tentang antarmuka Java BlockingQueue dan metodenya. BlockingQueue antarmuka Java Collections framework memperluas Queue antarmuka. Ini memungkinkan operasi apa pun untuk menunggu hingga berhasil dilakukan. Misalnya, jika kita ingin me
Java ArrayBlockingQueue Dalam tutorial ini, kita akan belajar tentang kelas ArrayBlockingQueue dan metodenya dengan bantuan contoh. ArrayBlockingQueue class framework Java Collections menyediakan implementasi antrian pemblokiran menggunakan array. Ini mengimplementasikan antarmuka Java BlockingQu