Dalam tutorial ini, kita akan belajar mengenai kata kunci super di Java dengan bantuan contoh.
Kata super
kunci di Java digunakan dalam subkelas untuk mengakses ahli superclass (atribut, konstruktor dan kaedah).
Sebelum kita mengetahui tentang super
kata kunci, pastikan untuk mengetahui tentang pewarisan Java.
Penggunaan kata kunci super
- Untuk memanggil kaedah superclass yang ditimpa subkelas.
- Untuk mengakses atribut (medan) superclass jika superclass dan subclass mempunyai atribut dengan nama yang sama.
- 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 super
kata 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 super
kata 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.