Kata kunci super Java (Dengan Contoh)

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

Kata superkunci di Java digunakan dalam subkelas untuk mengakses ahli superclass (atribut, konstruktor dan kaedah).

Sebelum kita mengetahui tentang superkata kunci, pastikan untuk mengetahui tentang pewarisan Java.

Penggunaan kata kunci super

  1. Untuk memanggil kaedah superclass yang ditimpa subkelas.
  2. Untuk mengakses atribut (medan) superclass jika superclass dan subclass mempunyai atribut dengan nama yang sama.
  3. Untuk memanggil secara eksplisit superclass no-arg (lalai) atau pembina parameter dari pembina subkelas.

Mari fahami setiap kegunaan ini.

1. Akses Kaedah Terganti dari superclass

Sekiranya kaedah dengan nama yang sama didefinisikan di kedua kelas super dan kelas, kaedah dalam kelas akan mengatasi kaedah di kelas super. Ini dipanggil kaedah overriding.

Contoh 1: Kaedah mengatasi

 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(); ) ) 

Pengeluaran

 Saya adalah anjing 

Dalam contoh ini, dengan membuat objek dog1 dari kelas Dog, kita dapat memanggil kaedahnya printMessage () yang kemudian melaksanakan display()pernyataan tersebut.

Oleh kerana display()didefinisikan di kedua kelas, kaedah Dog kelas bawah mengatasi kaedah superclass Animal. Oleh itu, display()subkelas dipanggil.

Bagaimana jika kaedah superclass yang diganti perlu dipanggil?

Kami menggunakan super.display()sekiranya kaedah display()superclass Animal yang diganti perlu dipanggil.

Contoh 2: Kaedah Superclass super to Call

 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(); ) ) 

Pengeluaran

 Saya anjing Saya haiwan 

Di sini, bagaimana program di atas berfungsi.

2. Atribut Akses Superclass

Superclass dan subclass boleh mempunyai atribut dengan nama yang sama. Kami menggunakan superkata kunci untuk mengakses atribut superclass.

Contoh 3: Akses 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 mamalia saya binatang 

Dalam contoh ini, kami telah menentukan jenis medan contoh yang sama di Superclass Animal dan subclass Dog.

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

Di dalam printType()fungsi,

  • type merujuk kepada atribut Dog subclass.
  • super.type merujuk kepada atribut Superclass Animal.

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

3. Penggunaan super () untuk mengakses pembina superclass

Seperti yang kita tahu, apabila objek kelas dibuat, konstruktor lalai akan dipanggil secara automatik.

Kami secara eksplisit memanggil superclass konstruktor dari subkelas konstruktor, kami menggunakan super(). Ini bentuk khas superkata kunci.

super() boleh digunakan hanya di dalam subkelas konstruktor dan mestilah penyataan 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(); ) ) 

Pengeluaran

 Saya binatang saya anjing 

Di sini, apabila objek dog1 dari kelas Dog dibuat, ia secara automatik memanggil konstruktor default atau no-arg kelas itu.

Di dalam konstruktor subkelas, super()pernyataan tersebut memanggil pembina superclass dan melaksanakan pernyataan di dalamnya. Oleh itu, kita mendapat output saya adalah haiwan.

Aliran program kemudian kembali ke konstruktor subkelas dan melaksanakan penyataan yang tinggal. Oleh itu, saya anjing akan dicetak.

Walau bagaimanapun, penggunaan super()tidak wajib. Walaupun super()tidak digunakan dalam konstruktor subkelas, penyusun secara tidak langsung memanggil konstruktor lalai superclass.

Jadi, mengapa menggunakan kod berlebihan jika penyusun secara automatik meminta super ()?

Ia diperlukan sekiranya konstruktor parameter (konstruktor yang mengambil argumen) dari superclass harus dipanggil dari subkelas konstruktor.

Parameter super()harus selalu menjadi pernyataan pertama dalam badan pembangun subkelas, jika tidak, kami mendapat ralat penyusunan.

Contoh 5: Panggil Pembina Parameterisasi 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(); ) ) 

Pengeluaran

 Jenis: Haiwan Saya anjing 

Penyusun dapat memanggil konstruktor no-arg secara automatik. Walau bagaimanapun, ia tidak dapat memanggil pembina parameter

Sekiranya konstruktor parameter harus dipanggil, kita perlu menentukannya secara eksplisit dalam konstruktor subkelas.

Perhatikan bahawa dalam contoh di atas, kita secara eksplisit memanggil konstruktor parameter super("Animal"). Penyusun tidak memanggil pembina lalai superclass dalam kes ini.

Artikel menarik...