Kata kunci super Java (Dengan Contoh)

Dalam tutorial ini, kita akan belajar tentang kata kunci super di Java dengan bantuan contoh.

Kata superkunci di Java digunakan dalam subclass untuk mengakses anggota superclass (atribut, konstruktor, dan metode).

Sebelum kita mempelajari tentang superkata kunci, pastikan untuk mengetahui tentang warisan Java.

Penggunaan kata kunci super

  1. Untuk memanggil metode superclass yang diganti di subclass.
  2. Untuk mengakses atribut (bidang) dari superclass jika superclass dan subclass memiliki atribut dengan nama yang sama.
  3. Untuk memanggil superclass no-arg (default) atau konstruktor berparameter secara eksplisit dari konstruktor subclass.

Mari kita pahami masing-masing kegunaan ini.

1. Access Overridden Methods dari superclass

Jika metode dengan nama yang sama didefinisikan di superclass dan subclass, metode di subclass menimpa metode di superclass. Ini disebut metode overriding.

Contoh 1: Penimpaan 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

 Saya seekor anjing 

Dalam contoh ini, dengan membuat objek dog1 dari kelas Dog, kita bisa memanggil metode printMessage () yang kemudian mengeksekusi display()pernyataan tersebut.

Karena display()didefinisikan di kedua kelas, metode subkelas Anjing menggantikan metode superkelas Hewan. Oleh karena itu, display()subclass disebut.

Bagaimana jika metode superclass yang diganti harus dipanggil?

Kami menggunakan super.display()jika metode yang diganti display()dari superclass Animal perlu dipanggil.

Contoh 2: Super to Call Superclass Method

 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

 Saya seekor anjing, saya seekor binatang 

Di sini, cara kerja program di atas.

2. Atribut Akses Superclass

Superkelas dan subkelas dapat memiliki atribut dengan nama yang sama. Kami menggunakan superkata kunci untuk mengakses atribut superclass tersebut.

Contoh 3: Mengakses atribut superclass

 class Animal ( protected String; ) class Dog extends Animal ( public String; 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 :

 Saya adalah mamalia, saya adalah binatang 

Dalam contoh ini, kami telah mendefinisikan jenis bidang contoh yang sama di kedua superclass Animal dan subclass Dog.

Kami kemudian membuat objek dog1 dari kelas Dog. Kemudian, printType()metode tersebut dipanggil menggunakan objek ini.

Di dalam printType()fungsinya,

  • type mengacu pada atribut dari subclass Dog.
  • super.type mengacu pada atribut dari superclass Animal.

Oleh karena itu, System.out.println("I am a " + type);cetakan saya adalah mamalia. Dan, System.out.println("I am an " + super.type);cetakan saya adalah binatang.

3. Penggunaan super () untuk mengakses konstruktor superclass

Seperti yang kita ketahui, ketika sebuah objek kelas dibuat, konstruktor defaultnya secara otomatis dipanggil.

Untuk memanggil konstruktor superclass secara eksplisit dari konstruktor subclass, kami menggunakan super(). Ini adalah bentuk khusus dari superkata kunci.

super() hanya dapat digunakan di dalam konstruktor subclass dan harus menjadi pernyataan pertama.

Contoh 4: Penggunaan super ()

 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

 Saya seekor binatang, saya seekor anjing 

Di sini, ketika objek dog1 dari kelas Dog dibuat, secara otomatis memanggil konstruktor default atau tanpa argumen dari kelas itu.

Di dalam konstruktor subclass, super()pernyataan memanggil konstruktor superclass dan menjalankan pernyataan di dalamnya. Oleh karena itu, kami mendapatkan keluaran I am a animal.

Alur program kemudian kembali ke konstruktor subclass dan mengeksekusi pernyataan yang tersisa. Jadi, saya anjing akan dicetak.

Namun, menggunakan super()tidak wajib. Bahkan jika super()tidak digunakan dalam konstruktor subclass, compiler secara implisit memanggil konstruktor default dari superclass.

Jadi, mengapa menggunakan kode redundan jika compiler secara otomatis memanggil super ()?

Ini diperlukan jika konstruktor berparameterisasi (konstruktor yang mengambil argumen) dari superclass harus dipanggil dari konstruktor subclass.

Parameterized super()harus selalu menjadi pernyataan pertama dalam tubuh konstruktor subclass, jika tidak, kita mendapatkan kesalahan kompilasi.

Contoh 5: Panggil Pembuat Parameter Menggunakan super ()

 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

 Jenis: Hewan Saya seekor anjing 

Kompilator dapat secara otomatis memanggil konstruktor no-arg. Namun, itu tidak dapat memanggil konstruktor berparameter.

Jika konstruktor berparameter harus dipanggil, kita perlu mendefinisikannya secara eksplisit dalam konstruktor subclass.

Perhatikan bahwa dalam contoh di atas, kami secara eksplisit memanggil konstruktor berparameter super("Animal"). Kompilator tidak memanggil konstruktor default dari superclass dalam kasus ini.

Artikel yang menarik...