Anda di halaman 1dari 14

MODUL PERKULIAHAN

Pemrograman
VI (OO II)
Object Oriented II

Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh


Teknik Teknik Informatika 06610005 Esa Fauzi, S.T., M.T.

02
Abstract Kompetensi
Resume ringkas/singkat, akurat, dan Mahasiswa mampu memahami Konsep
jelas terhadap isi materi pertemuan Object Oriented
mata kuliah mengacu pada
Rancangan Pembelajaran Semester
(RPS)
A. Java Inheritance
Di Java, dimungkinkan untuk mewarisi atribut dan metode dari satu kelas ke kelas lainnya.
konsep warisan ini dikelompokan menjadi dua kategori:

 subclass (anak) - kelas yang diwarisi dari kelas lain


 superclass (induk) - kelas yang mewarisi kepada kelas lain
Untuk mewarisi dari kelas, gunakan kata kunci extends.

Pada contoh di bawah ini, class Car (subclass) diwarisi atribut dan metode dari class Vehicle
(superclass):

Catatan:
Coba perhatikan protected modifier di kelas Vehicle. Jika disetel ke private, maka kelas
Car tidak akan dapat mengaksesnya.

Mengapa Dan Kapan Kita harus Menggunakan "Warisan"?


- Tujuan utamanya adalah untuk menggunakan kembali kode yang telah ditulis: seperti
menggunakan kembali atribut dan metode kelas yang ada saat membuat kelas baru.

A.1. The final Keyword


Jika Anda tidak ingin kelas lain mewarisi dari kelas, gunakan kata kunci
final:

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


2 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
A.2. extends Keyword
extends adalah kata kunci yang digunakan untuk mewarisi properti kelas. Berikut ini adalah
sintaks kata kunci extends.

A.2.1 Kode sampel


Berikut adalah contoh yang menunjukkan pewarisan Java. Dalam contoh ini, Anda dapat
mengamati dua kelas yaitu Calculation dan My_Calculation.

Menggunakan kata kunci extends, My_Calculation mewarisi metode addition() dan


Subtraction() dari kelas Calculation.

Example

class Calculation {
int z;

public void addition(int x, int y) {


z = x + y;
System.out.println("The sum of the given numbers:"+z);
}

public void Subtraction(int x, int y) {


z = x - y;
System.out.println("The difference between the given
numbers:"+z);
}
}

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


3 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
public class My_Calculation extends Calculation {
public void multiplication(int x, int y) {
z = x * y;
System.out.println("The product of the given numbers:"+z);
}

public static void main(String args[]) {


int a = 20, b = 10;
My_Calculation demo = new My_Calculation();
demo.addition(a, b);
demo.Subtraction(a, b);
demo.multiplication(a, b);
}
}

compile dan execute dua kode berikut.


javac My_Calculation.java
java My_Calculation
setelah dieksekusi akan menghasilkan
Output
The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200

Penjelasan : Dalam program yang diberikan, ketika sebuah objek ke kelas My_Calculation
dibuat, salinan konten superkelas dibuat di dalamnya. Itulah sebabnya, dengan menggunakan
objek subclass Anda bisa mengakses anggota superclass.

A.2 Kata Kunci Super


Kata kunci super mirip dengan kata kunci this. Berikut ini adalah skenario di mana
kata kunci super digunakan:
a. digunakan untuk membedakan anggota superclass dari anggota subclass, jika
keduanya memiliki nama yang sama.

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


4 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
b. digunakan untuk memanggil konstruktor superclass dari subclass.

Kode sampel
Berikut ini contoh penggunaan kata kunci super
Dalam program yang diberikan, terdapat dua kelas yaitu Sub_class dan
Super_class, keduanya memiliki metode bernama display () dengan implementasi
berbeda, dan variabel bernama num dengan nilai berbeda. Disini akan dipanggil
metode display () dari kedua kelas dan mencetak nilai dari variabel num dari kedua
kelas tersebut. Disini dapat diamati bahwa kita telah menggunakan kata kunci super
untuk membedakan anggota superclass dari subclass.

Example
class Super_class {
int num = 20;

// display method of superclass


public void display() {
System.out.println("This is the display method of
superclass");
}
}

public class Sub_class extends Super_class {


int num = 10;

// display method of sub class


public void display() {
System.out.println("This is the display method of
subclass");
}

public void my_method() {


// Instantiating subclass
Sub_class sub = new Sub_class();

// Invoking the display() method of sub class


sub.display();

// Invoking the display() method of superclass


super.display();

// printing the value of variable num of subclass


System.out.println("value of the variable named num in sub
class:"+ sub.num);

// printing the value of variable num of superclass

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


5 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
System.out.println("value of the variable named num in
super class:"+ super.num);
}

public static void main(String args[]) {


Sub_class obj = new Sub_class();
obj.my_method();
}
}

Compile dan execute kode diatas dengan syntax :.


javac Super_Demo
java Super
Hasilnya akan keluar:
Output
This is the display method of subclass
This is the display method of superclass
value of the variable named num in sub class:10
value of the variable named num in super class:20

A.3 Memanggil Konstruktor super


Jika suatu kelas mewarisi properti kelas lain, subkelas tersebut secara otomatis
memperoleh konstruktor default dari superclass tersebut. Tetapi jika Anda ingin
memanggil konstruktor berparameter dari superclass, Anda perlu menggunakan
kata kunci super seperti yang ditunjukkan di bawah ini.
super(values);

Kode sampel
Program yang diberikan dibagian ini mendemonstrasikan bagaimana menggunakan
kata kunci super untuk memanggil konstruktor parametrized dari superclass.
Program ini berisi superclass dan subclass, di mana superclass tersebut berisi
konstruktor berparameter yang menerima nilai integer, dan kita menggunakan kata
kunci super untuk memanggil konstruktor berparameter dari superclass tersebut.

Example
class Superclass {
int age;

Superclass(int age) {
this.age = age;
}

public void getAge() {


System.out.println("The value of the variable named age in
super class is: " +age);

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


6 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
}
}

public class Subclass extends Superclass {


Subclass(int age) {
super(age);
}

public static void main(String args[]) {


Subclass s = new Subclass(24);
s.getAge();
}
}

Compile dan execute kode program diatas dengan syntax


javac Subclass
java Subclass
ketika dieksekusi akan menghasilkan −
Output
The value of the variable named age in super class is: 24

A.3 IS-A Relationship


IS-A adalah relasi dimana suatu objek bisa dikatakan objek lain. Konsep relasi ini
bisa di implementasikan dengan mekanisme pewarisan.
public class Animal {
}

public class Mammal extends Animal {


}

public class Reptile extends Animal {


}

public class Dog extends Mammal {


}

berdasarkan contoh di atas, dalam istilah Berorientasi Objek, dapat dikatakan -

Animal adalah kelas super dari kelas Mammal.


Animal adalah superclass dari kelas Reptile.
Mammal dan Reptile adalah subclass dari kelas Animal.
Dog adalah subkelas dari kelas Mammal dan Animal.

Jika diterjemahkan dengan IS-A maka :

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


7 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
 Mammal IS-A Animal (Mamalia adalah hewan)
 Reptile IS-A Animal (reptile adalah hewan)
 Dog IS-A Mammal (anjing adalah mamalia)
 Hence: Dog IS-A Animal as well (oleh karena itu anjing adalah hewan juga)

Dengan menggunakan kata kunci extends, subclass akan dapat mewarisi semua
properti superclass kecuali properti privat dari superclass tersebut.

Disini dapat dipasikan bahwa Mamalia sebenarnya adalah Hewan dengan


menggunakan operator instance.
Example
Live Demo
class Animal {
}

class Mammal extends Animal {


}

class Reptile extends Animal {


}

public class Dog extends Mammal {

public static void main(String args[]) {


Animal a = new Animal();
Mammal m = new Mammal();
Dog d = new Dog();

System.out.println(m instanceof Animal);


System.out.println(d instanceof Mammal);
System.out.println(d instanceof Animal);
}
}

Output
true
true
true

A.4 Jenis Pewarisan


Terdapat beberapa jenis pewarisan dapat dilihat sebagai berikut :

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


8 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
Yang harus diperhatikan bahwa java tidak mendukung pewarisan lebih dari satu.
Yang berarti kelas dijava tidak bisa melakukan extends kepada du akelas atau lebih
seperti contoh ini :
Example
public class extends Animal, Mammal{}

Tetapi khusus untuk interface, Java dapat mewarisi lebih dari 1 interface

B. Java Overriding
Pada bab sebelumnya, kita berbicara tentang superclass dan subclass. Jika kelas mewarisi
method dari superclassnya, maka ada peluang untuk mengganti method tersebut asalkan pada
superclass tersebut tidak ditandai dengan tanda final.

Manfaat dari overriding (mengganti) adalah untuk memberikan perilaku yang spesifik pada
subkelas. Dalam istilah berorientasi objek, overriding berarti menimpa fungsionalitas method
yang ada.

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


9 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
Example
Perhatikan contoh berikut
Live Demo
class Animal {
public void move() {
System.out.println("Animals can move");
}
}

class Dog extends Animal {


public void move() {
System.out.println("Dogs can walk and run");
}
}

public class TestDog {

public static void main(String args[]) {


Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object

a.move(); // runs the method in Animal class


b.move(); // runs the method in Dog class
}
}
Output
Animals can move
Dogs can walk and run

Dalam contoh di atas, dapat dilihat bahwa meskipun b adalah tipe Animal, method move
yang dipanggil adalah di kelas Dog. Alasannya adalah: Pada waktu kompilasi, pengecekan
akan dilakukan pada tipe referensi. Namun, pada saat runtime, JVM lalu mengetahui jenis
objek asli dan akan menjalankan metode yang dimiliki oleh objek tersebut.

B.1 Menggunakan super keyword


Dalam method yang melakukan override kita masih bisa memanggil method asli parentnya
yaitu dengan menggunakan kata super
Example
Live Demo
class Animal {
public void move() {
System.out.println("Animals can move");
}
}

class Dog extends Animal {


public void move() {
super.move(); // invokes the super class method
System.out.println("Dogs can walk and run");
}
}

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


10 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
public class TestDog {

public static void main(String args[]) {


Animal b = new Dog(); // Animal reference but Dog object
b.move(); // runs the method in Dog class
}
}
Output
Animals can move
Dogs can walk and run

C. Java Polymorphism
Polimorfisme adalah kemampuan suatu objek untuk mengambil berbagai bentuk. Penggunaan
polimorfisme yang paling umum di OOP terjadi ketika referensi kelas parent digunakan
untuk merujuk ke objek kelas child.

Objek Java yang terdapat mekasime IS-A dianggap polimorfik.

Example
Perhatikan contoh berikut
public interface Vegetarian{}
public class Animal{}
public class Deer extends Animal implements Vegetarian{}

Sekarang kelas Deer akan dianggap sebagai polimorfik karena memiliki banyak
pewarisan. Dengan ini dapat dikatakan :

 A Deer IS-A Animal (Rusa adalah Hewarn)


 A Deer IS-A Vegetarian (Rusa adalah Vegetarian)
 A Deer IS-A Deer (Rusa adalah rusa)
 A Deer IS-A Object (Rusa adalah Objek)

Ketika kita mengaplikasikan variable referensi ke objek Deer maka deklarasi berikut
dianggap valid -
Example
Deer d = new Deer();
Animal a = d;
Vegetarian v = d;
Object o = d;

Semua varianbel referensi d, a, v, o akan merujuk kepada objek Deer (rusa)

C.1 Virtual Method

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


11 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
Pada subbab ini akan diperlihatkan bagaimana memanfaatkan metode overriding
dalam polimorfisme

Example
/* File name : Employee.java */
public class Employee {
private String name;
private String address;
private int number;

public Employee(String name, String address, int number) {


System.out.println("Constructing an Employee");
this.name = name;
this.address = address;
this.number = number;
}

public void mailCheck() {


System.out.println("Mailing a check to " + this.name + " "
+ this.address);
}

public String toString() {


return name + " " + address + " " + number;
}

public String getName() {


return name;
}

public String getAddress() {


return address;
}

public void setAddress(String newAddress) {


address = newAddress;
}

public int getNumber() {


return number;
}
}

Sekarang kita akan extend Employee class sebagai berikut −


/* File name : Salary.java */
public class Salary extends Employee {
private double salary; // Annual salary

public Salary(String name, String address, int number, double


salary) {
super(name, address, number);
setSalary(salary);

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


12 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
}

public void mailCheck() {


System.out.println("Within mailCheck of Salary class ");
System.out.println("Mailing check to " + getName()
+ " with salary " + salary);
}

public double getSalary() {


return salary;
}

public void setSalary(double newSalary) {


if(newSalary >= 0.0) {
salary = newSalary;
}
}

public double computePay() {


System.out.println("Computing salary pay for " +
getName());
return salary/52;
}
}

Perhatikan program ini baik-baik −


/* File name : VirtualDemo.java */
public class VirtualDemo {

public static void main(String [] args) {


Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3,
3600.00);
Employee e = new Salary("John Adams", "Boston, MA", 2,
2400.00);
System.out.println("Call mailCheck using Salary reference
--");
s.mailCheck();
System.out.println("\n Call mailCheck using Employee
reference--");
e.mailCheck();
}
}
Output
Constructing an Employee
Constructing an Employee

Call mailCheck using Salary reference --


Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference--


Within mailCheck of Salary class
Mailing check to John Adams with salary 2400.0

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


13 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id
Di sini, terdapat contoh dua objek Salary. Satu variable menggunakan referensi
Salary s, dan yang lainnya menggunakan referensi Employee e.

DiSaat memanggil s.mailCheck (), kompilator melihat mailCheck () di kelas Salary


pada waktu kompilasi, dan JVM memanggil mailCheck () di kelas Salary pada waktu
proses.

mailCheck () di e sangat berbeda karena e adalah referensi variable yang merujuk


kelas Employee. Ketika kompilator akan memanggil e.mailCheck (), maka kompilator
akan melihat metode mailCheck () di kelas Employee.

Di sini, pada waktu kompilasi, kompilator menggunakan mailCheck () di Employee


untuk memvalidasi pernyataan ini. Namun, pada saat dijalankan, JVM memanggil
mailCheck () di kelas Salary.

Perilaku ini disebut sebagai pemanggilan metode virtual.

‘20 Algoritma & Pemrograman II Biro Akademik dan Pembelajaran


14 Esa Fauzi, S.T., M.T. http://www.widyatama.ac.id

Anda mungkin juga menyukai