Java OOP | Inheritance

Java OOP | Inheritance

Pengertian Inheritance

inheritance merupakan mekasnisme suatu class yang dapat diturunkan ke class lain, class yang mewarisi disebut subclass dan class yang diwariskan disebut superclass. inheritance merupakan salah satu pilar penting dalam OOP karena kita bisa meminimalisir kode yang berulang..

Sintaks dasar pembuatan inheritance:

public class Subclass extends Superclass { }

untuk mewarisi sebuah class gunakan keyword extends

saat subclass mewarisi superclass, maka semua informasi field & method yang ada pada parentclass, secara otomatis dimiliki oleh subclass.

pada bahasa pemograman java, class Child hanya bisa memiliki satu class Parent, dan class Parent bisa memiliki lebih dari satu class Child.

Contoh Demonstrasi Inheritance Java:

Contoh Demonstrasi Inheritance Java

File: Employe.java

class Employe { String company = "DewaProgrammer"; float salary = 12000000; }

File: Developer.java

class Developer extends Employe { String name; public Developer(String name) { this.name = name; } public String getName() { return name; } }

File: Main.java

public class Main { public static void main(String[] xxx) { Developer backend_developer = new Developer("Kiki"); System.out.println("Developer Name : "+backend_developer.getName()); System.out.println("Developer Salary : "+backend_developer.salary); System.out.println("Developer Work Company : "+backend_developer.company); /* Output Developer Name : Kiki Developer Salary : 12000000.0 Developer Work Company : DewaProgrammer */ } }

dalam contoh demonstrasi diatas, object developer dapat mengakses informasi pada dirinya sendiri serta object employe, dengan catatan field class parent, acces modifier tidak boleh private.

Istilah Yang Digunakan Dalam Inheritance

  • subclass/class child: merupakan kelas turunan atau mewarisi kelas lain
  • superclass/class parent: adalah kelas yang mewarisi informasi yang dimilikinya ke kelas lain
  • method overriding: adalah kemampuan mendeklarasikan ulang nama method yang ada pada class Parent didalam class Child
  • super(): method super digunakan untuk memanggil constructor pada class parent
  • super: adalah keyword yang digunakan untuk mengakses informasi field & method yang ada pada class parent

Jenis-Jenis Inheritance

ada tiga jenis inheritance pada java:

  • Single Inheritance
  • MultiLevel Inheritance
  • Hierarchical Inheritance

dalam bahasa pemograman java, jenis inheritance multiple dan hybird, hanya bisa diterapkan pada interface.

Single Inheritance

Java OOP | Single Inheritance

ketika sebuah kelas yang dibuat, hanya mewarisi satu kelas lain. ini dikenal sebagai single inheritance. pada demonstrasi ini class Developer mewarisi class Employe.

Demonstrasi Single Inheritance:

File: Employe.java

public class Employe { public String position; public void seyHello(String name) { System.out.println("Hello "+name+", I am is "+this.position); } } public class Developer extends Employe { }

File: MainApp.java

public class MainApp { public static void main(String[] args) { Developer dev1 = new Developer(); dev1.position = "Backend Developer"; dev1.seyHello("dewaprogrammer"); dev1.position = "Data Enginner"; dev1.seyHello("kiki"); /* OUTPUT: Hello dewaprogrammer, I am is Backend Developer Hello kiki, I am is Data Enginner */ } }

MultiLevel Inheritance

Java OOP | Inheritance

Ketika ada hubungan kelas berantai. ini dikenal sebagai MultiLevel Inheritance. pada demonstrasi ini class Backend mewarisi class Developer dan class Developer mewarisi class Employe.

Demonstrasi MultiLevel Inheritance:

File: Employe.java

public class Employe { public String position; } public class Developer extends Employe { public void seyHello(String name) { System.out.println("Hello "+name+", I am is Developer "+this.position); } } public class Backend extends Developer { }

File: MainApp.java

public class MainApp { public static void main(String[] args) { Backend backend = new Backend(); backend.position = "Backend Enginner"; backend.seyHello("kiki"); /* OUTPUT: Hello kiki, I am is Developer Backend Enginner */ } }

Hierarchical Inheritance

Java OOP | Inheritance

Ketika satu atau lebih kelas yang mewarisi kelas lain, ini dikenal sebagai Hierarchical Inheritance. pada demonstrasi ini class Manager mewarisi class Employe dan class Developer mewarisi class Employe.

Demonstrasi Hierarchical Inheritance:

public class Employe { public String position; public void seyHello(String name) { System.out.println("Hello "+name+", I am is "+this.position); } } public class Developer extends Employe { private float allowance = 0.1F; public void devSalary(int salary) { int bonus = (int) (salary * allowance); int totalSalary = salary + bonus; System.out.println("Developer Salary is : "+totalSalary); } } public class Manager extends Employe { private float allowance = 0.15F; public void managerSalary(int salary) { int bonus = (int) (salary * allowance); int totalSalary = salary + bonus; System.out.println("Manager Salary is : "+totalSalary); } } public class MainApp { public static void main(String[] args) { Developer developer = new Developer(); developer.position = "Backend Developer"; developer.seyHello("kiki"); developer.devSalary(10_000_000); Manager manager = new Manager(); manager.position = "Project Manager"; manager.seyHello("kiki"); manager.managerSalary(20_000_000); /* OUTPUT: Hello kiki, I am is Backend Developer Developer Salary is : 11000000 Hello kiki, I am is Project Manager Manager Salary is : 23000000 */ } }

Multiple Inheritance

Java OOP | Inheritance

Ketika suatu kelas mewarisi dua atau lebih kelas, ini dikenal sebagai Multiple Inheritance.

namun perlu diketahui pada bahasa pemograman Java, tidak mendukung secara penuh jenis Multiple Inheritance. dengan alasan, suatu Subclass harus bisa mengatur ketergantungan terhadap dua Superclass.

namun jika ingin menerapkan Multiple Inheritance pada java, kita bisa menggunakan interface.

contoh skenario: kelas A, B dan C. dimana kelas C mewarisi kelas A dan B, dimana kelas A,B memiliki method dengan nama yang sama. kemudian method tersebut anda memanggilnya dari Subclass C, ini akan terjadi ambigu dan menyebabkan kesalah waktu Compiler.

Contoh Skenario Multiple Inheritance:

public class A { public void seyHello() { System.out.println("Hello"); } } public class B { public void seyHello() { System.out.println("Hello"); } } public class C extends A,B { //ini tidak bisa dilakukan } public class MainApp { public static void main(String[] args) { C c = new C(); c.seyHello(); //method di kelas mana yang akan dipanggil } }

Hybird Inheritance

Java OOP | Inheritance

hybird inheritance merupakan kombinasi dari multiple dan hierarchical, sudah pasti hybird tidak didukung inheritance di java, namun kita bisa menerapkan pada interface .

Keyword Super

keyword super digunakan untuk mengakses data seperi field & method yang ada pada kelas parent.

Demonstrasi Keyword Super:

File: University.java

public class University { public final String UNIVERSITY_NAME = "University Indo Global Mandiri"; public int capacity() { return 4000; } }

File: Lecture.java

public class Lecture extends University{ public void seyHello() { /*mengakses field kelas Parent*/ System.out.println("Hello Lecture "+super.UNIVERSITY_NAME); } public void getCapacityParent() { /*mengakses method kelas Parent*/ var capacity = super.capacity(); System.out.println("Capacity University :"+capacity); } }

File: MainApp.java

public class MainApp { public static void main(String[] args) { Lecture lecture = new Lecture(); lecture.seyHello(); //OUTPUT: Hello Lecture University Indo Global Mandiri lecture.getCapacityParent(); //OUTPUT: Capacity University :4000 } }

Method Super

method super digunakan untuk memanggil method constructor yang ada pada kelas Parent.

Sintaks dasar Method Super:

super(param1, param2, ...)

pengunaan method super biasanya digunakan, jika kelas Parent memiliki method constructor yang mempunyai parameter, maka semua kelas turunannya wajib memanggil method constructor kelas Parent tersebut, dengan cara mendefinisikan method super() didalam constructor kelas Child.

Sintaks dasar mendefinisikan Method Super:

public Constructor() { super(param1, param2, ...) }

Demonstrasi Method Super:

File: University.java

public class University { public final String UNIVERSITY_NAME = "University Indo Global Mandiri"; public String address; public University(String address) { this.address = address; } }

File: Lecture.java

public class Lecture extends University{ public String lectureName; public Lecture(String lectureName, String address) { super(address); this.lectureName = lectureName; } public void seyHello() { System.out.println("Lecture Name : "+this.lectureName); System.out.println("Lecture Address : "+super.address); } }

File: MainApp.java

public class MainApp { public static void main(String[] args) { Lecture lecture = new Lecture("Kiki", "South Sumatra"); lecture.seyHello(); /* OUTPUT: Lecture Name : Kiki Lecture Address : South Sumatra */ } }

jika kelas Parent memiliki method constructor yang tidak berparameter(default constructor), semua kelas turunan tidak wajib memanggil method constructor pada kelas Parent.

Method Overriding

override adalah kemampuan mendefinisikan ulang nama method yang sama di kelas Child. yang sudah ada di kelas Parent.

Demonstrasi Method Overriding:

File: Shape.java

public class Shape { public int getCorner() { return 0; } }

File: Rectangle.java

public class Rectangle extends Shape{ @Override public int getCorner() { return 4; }

File: MainApp.java

public class MainApp { public static void main(String[] args) { Rectangle rectangle = new Rectangle(); int corner = rectangle.getCorner(); System.out.println(corner); /* OUTPUT: 4*/ }

contoh demonstrasi diatas kita melakukan Overriding method getCorner, secara otomatis ketika kita membuat object kelas Child, method yang ada di kelas Parent tidak bisa diakses lagi. istilahnya method yang ada pada kelas Parent ditimpa.