1.4. Inheritance
Inheritance merupakan proses pewarisan data dan method dari suatu
class yang telah ada kepada suatu class baru. Class yang mewariskan disebut
dengan superclass / parent class / baseclass, sedangkan class yang
mewarisi (class yang baru) disebut dengan subclass / child class /derived
class.
Subclass tidak dapat mewarisi anggota private dari superclass-nya.
Dengan inheritance, class yang baru (subclass) akan mirip dengan class
yang lama (superclass) namun memiliki karakteristik yang baru.
Dalam Java, subclass hanya bisa memiliki satu superclass (single
inheritance) sedangkan superclass bisa memiliki satu subclass atau lebih.
Untuk menerapkan inheritance, gunakan statement “extends”.
Keyword “super” digunakan oleh subclass untuk memanggil
constructor, atribut dan method yang ada pada superclass-nya.
Contoh untuk memanggil constructor milik superclass-nya :
super()
super(parameter)
Contoh untuk memanggil atribut dan method milik superclass-nya :
super.namaAtribut
super.namaMethod(parameter)
1.5. Polimorfisme
Polimorfisme terbagi menjadi dua suku kata yaitu, Poly yang berarti
banyak dan Morfisme yang berarti bentuk. Dalam ilmu sains, Polimorfisme
(polymorphism) adalah sebuah prinsip dalam biologi di mana organisme
atau spesies memiliki banyak bentuk serta tahapan (stages). Prinsip tersebut
diterapkan juga pada bahasa Java
Polimorfisme dalam OOP merupakan sebuah konsep OOP di mana
class memiliki banyak “bentuk” method yang berbeda, meskipun namanya
sama. Maksud dari “bentuk” adalah isinya yang berbeda, namun tipe data
dan parameternya berbeda.
Polimorfisme juga dapat diartikan sebagai teknik programming yang
mengarahkan kamu untuk memprogram secara general daripada secara
spesifik. Contohnya kita memiliki tiga class yang berbeda yaitu: “Kelinci”,
“Kucing”, dan “Sapi”. Di mana ketiga class tersebut merupakan turunan
dari class “Hewan”. Polimorfisme pada Java memiliki 2 macam yaitu
diantaranya:
a. Static Polymorphism (Polimorfisme statis).
b. Dynamic Polymorphism (Polimorfisme dinamis).
Perbedaan keduanya terletak pada cara membuat polimorfisme.
Polimorfisme statis menggunakan method overloading, sedangkan
polimorfisme dinamis menggunakan method overriding.
BAB II
PEMBAHASAN
Shape() {
numSides = 3;
regular=true;
}
2.1.3. Tugas 3
Pada tugas 3 ini diminta untuk menuliskan sebuah kode untuk
membuat 2 contoh template class hewan yang tercantum dalam
masalah pada tugas 2. Pastikan untuk menggunakan kedua
konstruktor yang disediakan. Untuk kode program tersebut dapat
dilihat dibawah ini.
Animal a1 = new Animal();
Animal a2 = new Animal (50,21,4);
System.out.println("Animal #1 has a speed of" +
a1.getSpeed() + "Animal #2 has a speed of" +
a2.getSpeed());
2.1.4. Tugas 4
Pada tugas 4 ini diminta untuk membuat sebuah class siswa
dengan memiliki variabel nama, kredit, nilai rata-rata (IPK) dan poin
kualitas. Lalu membuat konstruktor dengan method yang telah
diberikan pada soal. Untuk kode program dapat dilihat dibawah ini.
package UAS;
2.1.5. Tugas 5
Pada tugas 5 ini diminta untuk membuat tiga instance Student
Class dari tabel di bawah ini dengan menggunakan class pada
soal 4:
Name Credits Quality Points
Mary Jones 14 46
John Stiner 60 173
Ari Samala 31 69
Dan dibawah ini untuk kode program sesuai dengan perintah
pada soal.
Student mary = new Student("Mary Jones",14,16);
Student john = new Student("John
Stiner",60,173);
Student ari = new Student("Ari Samala",31,69);
2.1.6. Tugas 6
Pada tugas 6 ini diminta untuk menggunakan variable instance
pada soal 5 untuk menambahkan 13 kredit dan 52 poin kualitas
untuk student yang bernama Ari Samala. Untuk kode program dapat
dilihat dibawah ini.
ari.addCredits(13,52);
2.1.7. Tugas 7
Pada tugas 7 ini diminta untuk menggunakan Card class pada
slide dan test program tersebut untuk memastikan program berjalan
dengan baik. Dan tambahkan kartu acak yang kedua.
package UAS;
return "error";
}
public int getPoints(String n) {
if(n == "Jack" ||n == "Queen" ||n ==
"King"||n == "Ten")
return 10;
if(n == "Two")
return 2;
if(n == "Three")
return 3;
if(n == "Four")
return 4;
if(n == "Five")
return 5;
if(n == "Six")
return 6;
if(n == "Seven")
return 7;
if(n == "Eight")
return 8;
if(n == "Nine")
return 9;
if(n == "Ace")
return 1;
return -1;
}
public String getSuit(int i) {
if(i == 1) return "Diamonds";
if(i == 2) return "Clubs";
if(i == 3) return "Spades";
if(i == 4) return "Hearts";
return "error";
}
}
MAIN CLASS
package UAS;
2.1.8 Tugas 8
Pada tugas 8 ini diminta untuk Menambahkan kode ke class
utama dalam tugas 7 sebagai berikut:
a. Menampilkan nilai poin total untuk 2 kartu acak.
b. Tanyakan kepada user apakah mereka menginginkan kartu lain.
Jika mereka mengatakan ya, tampilkan kartu baru dan poin untuk
ketiga kartu tersebut di “tangan” mereka.
c. Loop untuk memungkinkan user untuk terus menambahkan
kartu ke tangan sampai jumlah poin melebihi 21 atau user
memutuskan untuk tidak menambahkan kartu lagi atau jumlah
total kartu adalah 5.
Dan berikut ini merupakan kode program sesuai dengan perintah
soal.
package UAS;
import java.util.Scanner;
2.2.2. Tugas 2
Pada tugas 2 ini diminta untuk membuat konstruktor public
dalam class Fish. Konstruktor ini seharusnya tidak ada argument.
Didalam konstruktor, setel typeOfFish ke “Unknown” dan
friendliness ke 3. Untuk kode program dapat dilihat dibawah ini.
public class Fish {
private String typeOfFish;
private int friendliness;
public Fish() {
typeOfFish = "Unknown";
friendliness = 3;
}
}
2.2.3. Tugas 3
Pada tugas 3 ini diminta untuk membuat konstruktor public lain
ddialam class Fish. Minta konstruktor ini mengambil string t dan
integer f, membiarkan typeOfFish = t dan friendliness = f. Untuk
kode program dapat dilihat dibawah ini.
public class Fish {
String typeOfFish;
int friendliness;
public Fish() {
typeOfFish = "Unknown";
friendliness = 3;
}
public Fish(String t, int f) {
typeOfFish = t;
friendliness = f;
}
}
2.2.4. Tugas 4
Pada tugas 4 ini diminta untuk menjelaskan mengapa
dimungkinkan untuk memiliki lebih dari satu konstruktor dengan
nama yang sama dan argumen yang berbeda.
Dan untuk sebuah class dapat memiliki banyak konstruktor
selama parameter yang mereka ambil tidak sama. Kita dapat
menentukan konstruktor sebanyak yang dibutuhkan. Ketika class
Java berisi banyak konstruktor, kita katakan bahwa konstruktor
kelebihan beban (tersedia dalam beberapa versi). Inilah yang
dimaksud dengan overload konstruktor, bahwa class Java berisi
banyak konstruktor. Karena itu, sepenuhnya tergantung pada
implementasi kita sendiri apakah kita ingin membuat lebih dari satu
konstruktor di class atau tidak, tetapi memilki lebih dari satu
konstruktor dapat memudakan kita dalam banyak kasus.
2.2.5. Tugas 5
Pada tugas 5 ini diminta untuk membuat method dalam class
Fish yang disebut dengan getFriendliness() yang tidak mengambil
argument dan mengembalikan tingkat keramahan ikan. Untuk kode
program tersebut dapat dilihat dibawah ini.
public class Fish {
String typeOfFish;
int friendliness;
public Fish() {
typeOfFish = "Unknown";
friendliness = 3;
}
public Fish(String t, int f) {
typeOfFish = t;
friendliness = f;
}
int getFriendliness() {
return friendliness;
}
}
2.2.6. Tugas 6
Pada tugas 6 ini diminta untuk menuliskan segmen kode yang
menginisialisasi 2 ikan baru seperti yang didefinisikan di bawah ini:
a. Ikan 1 : Nama-Amber, Jenis-AngelFish, Tingkat Keramahan-
5(sangat ramah)
b. Ikan 2 : Nama-James, Jenis-Guppy, Tingkat Keramahan-
3(netral).
Untuk kode program yang diperintahkan pada soal dapat dilihat
dibawah ini.
Fish amber = new Fish(AngelFish,5);
Fish james = new Fish(Guppy,3);
2.2.7. Tugas 7
Pada tugas 7 ini diminta untuk membuat method nicestFish yang
menggunakan 2 ikan sebagai parameter, membandingkan tingkat
keramahan 2 ikan dan mengembalikan ikan dengan keramahan lebih
tinggi. Untuk kode program dapat dilihat dibawah ini.
Fish nicestFish(Fish a, Fish b) {
if(a.getFriendliness() >
b.getFriendliness()) {
return a;
} else {
return b;
}
}
2.2.8 Tugas 8
Pada tugas 8 ini diminta untuk mengubah method nicestFish()
menjadi method argumen variabel yang mengambil sejumlah
variabel ikan dan mengembalikan ikan terbaik dari ikan yang
diberikan. Petunjuk:
Didalam method, buat ikan bernama temp. atur suhu sama
dengan ikan pertama yang masuk kedalam method. Gunakan loop
for untuk menelusuri semua ikan yang lolos ke metode dan jika
Anda menemukan ikan yang lebih ramah daripada suhu, atur suhu
yang sama dengan ikan itu. Setelah loop for selesai, temp harus
menjadi ikan yang paling ramah. Kembalikan suhu. Untuk kode
program dapat dilihat dibawah ini.
Fish nicestFish(Fish....a) {
Fish temp = a[0];
for(int i = 1; i < a.length; i++) {
if(temp.getFriendliness() <
a[i].getFriendliness())
temp = a [i];
}
return temp;
}
2.2.9. Tugas 9
Pada tugas 9 ini diminta untuk menguji method nicestFish()
dengan ikan yang dijelaskan pada tugas 6. Ikan yang dikembalikan
adalah ikan amber.
2.2.10. Tugas 10
Pada tugas 10 ini diminta untuk menentukan access modifier
terbaik untuk setiap situasi berikut:
a. Kelas Karyawan mencatat nama, alamat, gaji, dan nomor
telepon.
b. Metode penambahan di dalam kelas BasicMath yang juga
digunakan di kelas Aljabar.
Pembahasan :
Terdapat beberapa access modifier pada java, yaitu :
1) Default : hanya dapat diakses dalam paket yang sama.
2) Public : dapat diakses oleh semua kelas.
3) Private : hanya dapat diakses didalam kelas.
Untuk situasi a. Kelas Karyawan mencatat nama, alamat, gaji,
dan nomor telepon. Access modifier yang terbaik yaitu Protect,
protect digunakan di kelas yang saling memperluas.
Untuk situasi b. b. Metode penambahan di dalam kelas
BasicMath yang juga digunakan di kelas Aljabar. Access Modifier
yang terbaik yaitu Public, metode public ini dapat digunakan dalam
berbagai paket dan proyek dan kelas serta tidak ada informasi
penting mengenai keamanan.
2.3. Pembahasan Practice Lesson 7-3: The Static Modifier and Nested
Classes
2.3.1. Tugas 1
Pada tugas 1 ini diminta untuk membuat program dengan
petunjuk yang telah diberikan pada soal. Untuk kode programnya
dapat dilihat dibawah ini.
CLASS VEHICLE
public class Vehicle {
public static String MAKE ="Augur";
public static int numVehicles = 0;
private String chassisNo, model;
public Vehicle(){};
public Vehicle(String model) {
this.model = model;
numVehicles = numVehicles+1;
chassisNo =
"Ch"+Integer.toString(numVehicles);
System.out.println("Vehicle
manufactured");
}
public void setChassisNo(String cNo) {
this.chassisNo = cNo;
}
public void setModel(String model) {
this.model = model;
}
public String getChassisNo() {
return chassisNo;
}
public String getModel() {
return model;
}
public void ToString() {
System.out.println("The vehicle is
Manufactured by : "+ MAKE);
System.out.println("The model type
is : "+this.getModel());
System.out.println("The chassis
number is : "+this.getChassisNo());
System.out.println("Number of
vehicles manufactured: "+numVehicles);
}
}
CLASS TESTVEHICLE
public class TestVehicle {
public static void main(String args[]) {
System.out.println("Manufacturer :
"+ Vehicle.MAKE);
System.out.println("Number of
vehicles manufactured: "+Vehicle.numVehicles);
Vehicle vehicle1 = new
Vehicle("Vision");
System.out.println("Number of
vehicles manufactured:
"+vehicle1.getChassisNo());
vehicle1.ToString();
Vehicle vehicle2 = new
Vehicle("Edict");
vehicle2.ToString();
}
}
Untuk output dari program diatas dapat dilihat pada gambar
dibawah ini.
2.3.2. Tugas 2
Pada tugas 2 ini diminta untuk menambah kode program
sehingga menghasilkan output yang tertera pada soal. Untuk kode
programnya dapat dilihat dibawah ini.
public class Vehicle {
public static String MAKE = "Seer";
public static int numVehicles = 0;
private String chassisNo, model;
public Vehicle(){};
2.3.3. Tugas 3
Pada tugas 3 ini diminta untuk membuat class baru mengenai
kapasitas mesin. Untuk kode program dapat dilihat dibawah ini.
public class Vehicle {
public static String MAKE = "Seer";
public static int numVehicles = 0;
private String chassisNo, model;
public Vehicle(){};
}
public void paint(Graphics graph) {
graph.setFont(font);
graph.drawString("Draw
Shapes",90,20);
graph.setColor(blueColor );
graph.drawRect(120, 120, 120, 120);
graph.fillRect(115, 115, 90, 90);
graph.setColor(redColor);
graph.fillArc(110,110,50,50,0,360);
graph.setColor(Color.CYAN);
graph.drawRect(50,50,50,50);
graph.fillRect(50,50,60,60);
}
}
Applet adalah salah satu jenis program yang bisa dihasilkan oleh
bahasa pemrograman Java selain program aplikasi dekstop dan
server. Applet Java harus dijalankan menggunakan web browser,
misalnya di Google Chrome dan browser lainnya. Applet Java dapat
disertakan didalam dkoumen HyperText Markup Language
(HTML) bila ingin di web browser. Dokumen HTML menggunakan
tag untuk memberikan instruksi ke web browser dan web browser
akan menerjemahkan dan memutuskan bagaimana menampilkan
atau memperlakukan konten dari dokumen HTML.
2.4.2. Tugas 2
Pada tugas 2 ini diminta untuk menggambar diagram UML
sederhana dengan kelas-kelas berikut:
a. Pohon, kayu keras, kayu lunak, birch, abu, aras, pinus,pinus
merah, dimana kayu keras dan kayu lunak adalah jenis pohon,
birch dan aras adalah jenis kayu keras dan cedar dan pinus adalah
jenis kayu lunak. Pinus merah adalah sejenis pinus.
b. A,B,C,D,E,F, dimana B dan C tipe A, D adalah tipe B, E adalah
tipe C dan F adalah tipe E.
2.4.3. Tugas 3
Pada tugas 3 ini diminta untuk membuat hirarki kelas yang
mewakili siswa di universitas. Siswa adalah tipe Orang, tetapi
Mahasiswa memiliki karakteristik yang lebih spesifik seperti
memilik nilai IPK, ID, dan disiplin studi. Membuat subclass orang
yang dipanggil siswa menggunakan kode untuk orang dan
spesifikasi yang tercantum pada soal latihan yang diberikan. Untuk
kode program dapat dilihat dibawah ini.
import java.util.Date;
2.4.4. Tugas 4
Pada tugas 4 ini diminta untuk menentukan Benar/Salah –
Subclass dapat mengakses kode ini di superclass dan memberikan
alasannya.
a. Public String aString; benar. Variabel public (yang tidak
berfungsi) dapat diakses oleh subclass.
b. Memperlihatkan Boolean aBoolean; benar. Diproteksi
membatasi viabilitas variabel kelas itu sendiri dan semua
subclassnya.
c. Int anInt; benar. Jika tidak ada pengubah akses yang
dideklarasikan, defaultnya pengaturan digunakan. Default
biasanya memungkinkan akses untuk semua class dalam paket
yang sama dengan class.
d. Private double aDouble; salah. Variabel private tidak diwarisi
oleh subclass dan tidak dapat diakses menggunakan kata kunci
super.
e. Publis String aMet() benar. Method public dapat diakses oleh
semua class, termasuk subclass.
f. Private class aNestedClass salah. Class bertingkat pribadi hanya
ada didalam lingkup class empat mereka didefinisikan dan tidak
dapat diakses oleh subclass atau class lainnya.
g. Public aClassConstructor() benar. Konstruktor publik dpaat
diakses oleh subclass menggunakan kata kunci super.
2.4.5. Tugas 5
Pada tugas 5 ini diminta untuk membuat sebuah program
berdasarkan pernyataan pada soal yang telah diberikan. Untuk kode
program tersebut dapat dilihat dibawah ini.
public class Instrument {
private boolean onSale;
private double price;
private int numInStock;
2.4.8 Tugas 8
Pada tugas 8 ini diminta untuk membuat diagram UML dari
Class Crab, Crustacea, Manmal, Dog, Hermit, Crab, Animal, dan
Object. Untuk diagram UML-nya dapat dilihat dibawah ini.
2.5. Pembahasan Practice Lesson 7-5: Polymorphism
2.5.1. Tugas 1
Pada tugas 1 ini diminta untuk menampilkan output dari kode
program yang ada pada soal.
public class A {
void callthis() {
System.out.println("Inside Class A's
Method!");
}
}
public class B extends A{
void callthis() {
System.out.println("Inside Class B's
Method!");
}
}
public class C extends A {
void callthis() {
System.out.println("Inside Class C's
Method!");
}
}
public class DynamicDispatch {
public static void main(String args[]) {
A a = new A();
B b = new B();
C c = new C();
A ref;
ref = b;
ref.callthis();
ref = c;
ref.callthis();
ref = a;
ref.callthis();
}
}
Dan gambar berikut ini merupakan output dari program yang
tertera pada tabel diatas.
Gambar 2.4 Output Program
2.5.2. Tugas 2
Pada tugas 2 ini diminta untuk menjelaskan perbedaan antara
kelas abstrak dan antarmuka dan kapan waktu yang tepat untuk
menggunakan kelas abstrak ataupun antarmuka.
Penjelasannya yaitu, baik kelas abstrak maupun antarmuka tidak
dapat dibuat instance-nya, tetapi kelas abstrak bisa berisi metode dan
konstruktor yang di implementasikan atau di implemenstaikan
sebagian selain data. Antarmuka hanya menentukan metode mana
yang harus disertakan. Kelas abstrak dapat menentukan yang mana
metode harus diimplementasikan dalam subclass nya jika metode
dideklarasikan sebagai abstrak.
Abstrak class paling baik digunakan ketika seorang programmer
ingin menerapkan metode yang sama di beberapa subclass atau saat
bidang data perlu dimasukkan kedalam beberapa kelas, serta
mewajibkan subclass untuk memasukkan metode tertentu dengan
memasukkan metode abstrak. Dan untuk Antarmuka paling baik
digunakan ketika tidak ada data atau metode yang perlu di
implementasikan dengan kode yang ama diseluruh class. Tetapi
metode harus dimasukkan.
2.5.3. Tugas 3
Code: Always Compile, Sometimes Compile,
or Does Not Compile?
a = new B(); Always compile
d = new C(); Does not compile
b.methodA(); Always compile
e.methodA(); Always compile
c = new C(); Does not compiles
(D)c.methodC(); Sometimes compiles
2.5.4. Tugas 4
Pada tugas 4 ini diminta untuk mengganti metode toString()
untuk class dibwah ini untuk mengeluarkan hasil, cocok dengan
output yang diberikan. The toString() metode harus mencetak semua
nilai dari 1 ke nomor yang ditentukan dalam num dan kemudian
mencetak nilai akhir menggunakan menyediakan metode
getFactorial.
“Factorial: 10! =1*2*3*4*5*6*7*8*9*10 = 3628800”
int getFactorial(){
int factorial;
for(i = num; num > 0; i--){
factorial *= num;
}
return factorial;
}
public String toString() {
}
Untuk kode program dapat dilihat pada tabel dibawah ini.
public class Factorial {
static final int num=10;
public static void main(String[] args) {
System.out.println(Factorial.toString(num)
);
}
static int getFactorial(int num) {
int factorial=1;
for(int i =num; i>0; i--) {
factorial *= i;
}
return factorial;
}
public static String toString(int num) {
String kata;
kata = "Factorial: "+ num +"! =
1*2*3*4*5*6*7*8*9*10 = " +
getFactorial(Factorial.num);
return kata;
}
}
BAB III
PENUTUP
3.1. Kesimpulan
OOP dapat dianggap lebih baik dari banyak aspek, terutama ketika
mempertimbangkan waktu pengembangan dan biaya pemeliharaan. Dalam
konsep OOP, hal paling mendasar untuk diketahui adalah Class, Object, dan
Method. Ketiga hal tersebut saling berkaitan satu sama lain. Selanjutnya,
pada method itu sendiri diperlukan sebuah parameter yang dapat digunakan
untuk menentukan proses atau hasil dari method tersebut.
Tentunya agar konsep OOP menjadi sempurna, terdapat sebuah
konsep yang juga sangat penting yaitu Inheritance (Pewarisan), Modifier
dan Polimorfisme.
Inheritance digunakan untuk membuat class-class turunan yang
mempunyai fungsi lebih spesifik namun dengan dasar yang umum seperti
class induknya.
Modifier digunakan utnuk membatasi atau mengatur hak akses suatu
variabel dan method agar tidak sembarangan diakses sehingga
meminimalisir kerusakan atau kesalahan pemrosesan data.
Polimorfisme digunakan agar baris program yang dibuat efektif dan
efisien sehingga tidak boros dalam penggunaan memori dan memudahkan
programmer dalam menuliskan baris program.
DAFTAR PUSTAKA
http://bahasa-pemrograman-java.blogspot.com/2014/03/class-di-java.html
(Diakses pada 07 Desember 2021)
https://www.dewaprogrammer.com/2021/09/nested-class.html
(Diakses pada 07 Desember 2021)
https://www.dicoding.com/blog/pengertian-polimorfisme-dalam-
pemrograman-java/ (Diakses pada 07 Desember 2021)
https://teknorial.com/blog/class-dan-object-pada-pemrograman-java/
(Diakses pada 07 Desember 2021)
Muhardian, Ahmad. 2021. Belajar Java OOP: Memahami Inheritance dan Method
Overriding
https://www.petanikode.com/java-oop-inheritance/
(Diakses pada 07 Desember 2021)