Inheritance
d. Ouput
Analisa: pada percobaan ini, class Animal menjadi class parent dari class Dog, sehingga class Dog
sebagai child mewarisi method yang ada pada class parentnya ,yaitu class Animal., Kemudian,
untuk mencoba membuktikan proses inheritance, maka dibuat class TestInheritance. Didalam class
ini, dibuat var d dengan tipe data class Dog. Kemudian, var d ini , mengakses method bark() yang
ada dalam clas Dog, serta mengakses pula method eat() yang merupakan method warisan class
animal kepada class childnya yaitu class Dog.
Percobaan 2
a. Listing
public class Animal {
void eat(){
System.out.println("Eating....");
}
}
b. Listing
public class Dog extends Animal{
void bark(){
System.out.println("barking....");
}
}
c. Listing
public class BabyDog extends Dog{
void weep(){
System.out.println("weeping....");
}
}
d. Listing
public class TestInheritance2 {
public static void main(String[] args) {
BabyDog d=new BabyDog();
d.weep();
d.bark();
d.eat();
}
}
e. Output
Analisa: pada percobaan ini, class Animal menjadi class parent dari class Dog, sehingga class Dog
sebagai child mewarisi method yang ada pada class parentnya ,yaitu class Animal. Kemudian
dibuat lagi class baru dengan nama BabyDog sebagai subclass/child dari class Dog.Untuk
mencoba membuktikan proses inheritance, maka dibuat class TestInheritance2. Didalam class ini,
dibuat var d dengan tipe data class BabyDog. Kemudian, var d ini , mengakses method weep()
yang ada dalam class BabyDog, mengakses method bark() yang merupakan warisan dari class
Dog, serta mengakses pula method eat() yang merupakan method warisan class animal kepada
class childnya yaitu class Dog, kemudian class dog ini mewariskan lagi kepada class BabyDog.
Percobaan 3
a. Listing class Animal
public class Animal {
void eat(){
System.out.println("Eating....");
}
}
e. Output
pada percobaan ini, class Animal menjadi class parent dari class Cat dan class Dog,
sehingga class Dog dan class Cat sebagai child mewarisi method yang ada pada class
parentnya ,yaitu class Animal. Disini,kita ketahui,bahwa class parent bisa dipakai untuk
lebih dari satu child. Kemudian, untuk mencoba membuktikan proses inheritance, maka
dibuat class TestInheritance3. Didalam class ini, dibuat var c dengan tipe data class Cat.
Kemudian, var c ini , mengakses method meow() yang ada dalam class Cat, serta
mengakses pula method eat() yang merupakan method warisan class animal kepada class
childnya yaitu class Cat dan class Dog..
Percobaan 4a
a. Listing
public class Parent {
String parentName;
public Parent(String parentName) {
this.parentName= parentName;
}
}
b. Listing
public class Baby extends Parent{
public Baby(){
super("Baby");
}
public void Cry() {
System.out.println("Owek owek");
}
}
c. Listing
public class TesP4 {
public static void main(String[] args) {
Baby b=new Baby();
System.out.println(b.parentName);
b.Cry();
}
}
d. Output
Analisa: pada percobaan ini, class Parent menjadi class parent dari class Baby, sehingga class
Baby sebagai child/subclass yang mewarisi method yang ada pada class parentnya ,yaitu class
Parent. Didalam class Baby, ada sebuah method public baby, yang didalamnya mengakses member
dari class parent dengan menggunakan kata kunci super, dan membrikan argument
“Baby”.Kemudian, untuk mencoba membuktikan proses inheritance, maka saya membuat class
TesP4 pada percobaan ini. Didalam class ini, dibuat var b dengan tipe data class Baby. Kemudian,
var b ini , mengakses yang variable parentname dalam clas Baby, dimana merupakan variable
warisan dari class Parent, serta mengakses pula method Cry() yang merupakan method class
orisinil milik class Baby.
Percobaan 4b.
a. Listing class Bicycle
public class Bicycle {
public int gear;
public int speed;
public Bicycle(int gear,int speed){
this.gear=gear;
this.speed=speed;
}
public void applyBrake(int decrement){
speed-=decrement;
}
public void speedUp(int increment){
speed+=increment;
}
public String toString(){
return ("No of gears are "+gear+"\n"+"speed of bicycle is
"+speed);
}
}
@Override
public String toString() {
return (super.toString()+"\nseat height is "+seatHeight);
}
}
c. Listing
public class Test {
public static void main(String[] args) {
MountainBike mb=new MountainBike(3,1000,25);
System.out.println(mb.toString());
}
}
d. Output
Analisa: pada percobaan ini, class Bicycle menjadi class parent dari class MountainBike, sehingga
class MountainBike sebagai child/subclass mewarisi method yang ada pada class parentnya ,yaitu
class Bicycle. Didalam class MountainBike , didalam method constructor nya yang public
MountainBike(int gear,int speed,int startHeight), disitu terlihat argument gear & speed, akan
dimasukkan ke nilai var gear dan speed yang ada di class parentnya dengan menggunakan kata
kunci super. Kemudian untuk argument starHeight, nilainya di assign ke var seatHeigt yang ada
dalam class MountainBike itu sendiri. Kemudian, pada class MountainBike ini dilakukan override
method/constructor public toString, yang ada pada class parentnya dengan menambahkan kalimat
untuk menunujukkan seat Hightnya. Untuk mencoba membuktikan proses inheritance, maka
dibuat class Test pada percobaan ini. Didalam class ini, dibuat var mb dengan tipe data class
MountainBike. Kemudian, var mb ini , mengakses, method toString yang ada pada class
mountainBike, yang merupakan warisan dari class Bicycle yang di override di class childnya,
sehingga tampillah output diatas.
Latihan 1:
a. Listing
package perbankan;
public class Tabungan {
public int saldo;
public Tabungan(int saldo){
this.saldo=saldo;
}
this.saldo+=jumlah;
}
public boolean ambilUang(int jumlah){
if(this.saldo<jumlah)
return false;
else{
this.saldo-=jumlah;
return true;
}
}
}
b. Listing
package perbankan;
@Override
public int getSaldo() {
return super.getSaldo()+this.proteksi;
}
@Override
public boolean ambilUang(int jumlah) {
return super.ambilUang(jumlah);
}
}
c. Listing
import perbankan.Tabungan;
import perbankan.PengambilanUang;
d. Output
Analisa: pada percobaan ini, class Tabungan menjadi class parent dari class PengambilanUang,
sehingga class PengambilanUang sebagai child/subclass yang mewarisi method yang ada pada
class parentnya ,yaitu class Tabungan. Kedua class ini dijadikan satu package dengan nama
perbankan. Untuk mencoba membuktikan proses inheritance, maka dibuat class TesTugas pada
percobaan ini. Didalam class ini, dibuat var tabungan dengan tipe data class PengambilanUang
dengan mengisi argument untuk saldo =5000, tingkat bunga =1000. Kemudian argument ini
dikirim ke constructor method yang pada class pengambilanUang, kemudian diakses var saldo
dengan kata kunci super, dan saya mengisi nilai saldo pada parent dari class PengmbilanUang ini,
dengan cara mengurangi saldo dengan tingkatbunga, sehingga, nilai saldo di class parent menjadi
4000 atau dalam code seperti ini :super(saldo-tingkatBunga);. Kemudian nilai tingkatBunga yang
1000 tadi di assign ke dalam var proteksi yang ada dalam class PengambilanUang. Kemudian,
saya meng override method getSaldo dengan tujuan mengembalikan nilai semula saldo diawal
menjadi 5000 sesuai inputan dengan menambahkan super.getSaldo() millik class parent dengan
var proteksi seprti yang ada disini:
@Override
public int getSaldo() {
return super.getSaldo()+this.proteksi;
}
Kemudian dilakukan override juga method class parent lainnya oleh subclass untuk pengambilan
uang
@Override
public boolean ambilUang(int jumlah) {
return super.ambilUang(jumlah);
}
Sehingga akan muncul tampilan dilayarsa pertama saldo =5000, kemudian, akan diambil 4500,
maka akan gagal , karena minimal sisa saldo selepas mengambil uang itu 1000, maka kembalinya
false dan saldo utuh 5000.
Tugas 1
a. Listing Lingkaran
public class Lingkaran {
private double r;
public Lingkaran(){
this.r=7;//nilai default
}
public Lingkaran(double r){
this.r=r;
}
b. Listing Silinder
public class Silinder extends Lingkaran {
private double tinggi;
public Silinder(){
this.tinggi=10;//nilai default
}
public Silinder(double r,double t){
super(r);
this.tinggi=t;
}
public void setTinggi(double tinggi){
this.tinggi=tinggi;
}
public Kerucut(){
this.tinggi=10;//nilai default
}
public Kerucut(double r,double t){
super(r);
this.tinggi=t;
}
public void setTinggi(double tinggi){
this.tinggi=tinggi;
}
d. Listing TesTugas1
public class TesTugas1 {
public static void main(String[] args) {
Kerucut krucut=new Kerucut(10,30);
System.out.println("Volume kerucut adalah
"+krucut.getVolume());
Silinder slinder=new Silinder(7,28);
System.out.println("Volume silinder adalah
"+slinder.getVolume());
}
}
e. Output
pada percobaan ini, class Lingkaran menjadi class parent dari class Silinder dan class Kerucut
sehingga class Silinder dan class Kerucut sebagai child mewarisi method yang ada pada class
parentnya ,yaitu class Lingkaran. Disini,kita ketahui,bahwa class parent bisa dipakai untuk lebih
dari satu child. Kemudian, untuk mencoba membuktikan proses inheritance, maka dibuat class
TesTugas1. Didalam class ini, dibuat var krucut dengan tipe data class Kerucut dengan
pemberian argument r=10,dan t=30. Kemudian, var krucut ini , mengakses method getVolume
yang ada dalam class Kerucut. Kemudian , saya juga membuat var slinder dengan tipe data class
Silinder dengan pemberian argument r=7,dan t=28; argument argument ini untuk yang r terutama
akan diassign ke nilai r yang ada di class Parent yaitu class Lingkaran dan diwariskan ke class
childnya. Untuk argument t dimasukkan ke nilainya ke var yang ada di class child masing -
masing. Untuk menghasilkan volume Kerucut dan Silinder, kita dapat meggunakan perintah
super.getLuas() dari class Lingkaran. Untuk silinder bisa dengan
super.getLuas()*this.tinggi atau 3.14*super.getR()*super.getR()*this.tinggi
Begitupun juga dengan kerucut bisa dengan :
Kontrol Pengaksesan
c. Analisa:
Pada kode diatas, tidak dapat dijalankan karena tidak ada clas yang mempunyai method
main(). Pada class Complex atribut didelkarasikan sebagai private yang hanya bisa diakses
dalam class itu saja. Pada clas Client dalam method usethem didekalarasikan dan
diinisialisasikan variable c1-c4 dengan menggunakan tipe data class Complex sebagai
object yang digunakan. Pada var c1 hingga c3 bisa mengakses method yang ada dalam
class Complex karena modifier methodnya berupa public, sedangkan pada variable c4
dicoba meng-assign nilai dari real yang ada pada class Complex. Tentu saja ini illegal,
disebabkan var real ddeklarasikan dengan private sehingga hanya class complex yang dapat
menggunakannya. Untuk memudahkan saya dalam memahminya saya menambah sedikit
kode pada Client utnuk menampilkan data dan membuat class yang berisi main untuk
menampilkan hasilnya:
d. Penambahan code pada class Client
public class Client {
void useThem(){
Complex c1=new Complex(1,2);
Complex c2=new Complex(3,4);
Complex c3=c1.add(c2);
//double d =c3.real;//illegal
System.out.println(c1.toString());
System.out.println(c2.toString());
System.out.println(c3.toString());
}
}
e. Class test untuk menampilkan nilai
public class Test extends Client{
public static void main(String[] args) {
Client c=new Client();
c.useThem();
}
}
f. Output
Percobaan 2
a. Listing class ComplexP2
public class ComplexP2 {
private double real,imaginary;
}
c. Analisa
Pada kode diatas, tidak dapat dijalankan karena tidak ada clas yang mempunyai method
main(). Pada class SubComplex yang merupakan child dari class ComplexP2 , akan terjadi
error disebabkan pada class SubCompleks, menggunakan variable yang ada pada parent
dengan modifier private yang diamana tidak dapat digunakan pada class childnya, hanya
bisa digunakan oleh class parent itu sendiri.
Percobaan 3
a. Listing
package sportinggoods;
}
}
b. Listing
package differentPackage;
c. Analisa:
Class DownhillSki meupakan child dari class Ski, namun kedua class ini masing-masing
berada pada package yang berbeda. Pada class DownhillSki, mencoba mengakses method
applyWax() parentnya yaitu dari class Ski yang modifier methodnya default. Tentu saja
akan terjadi error karena method yang modifier nya default tidak bisa diakses oleh class
yang berada package yang berbeda walaupun class tersebut merupakan childa daric las
parent yang berada pada package yang berbeda.
Percobaan 4
a. Listing
package differentPackage;
}
}
b. Listing
package sportinggoods;
import differentPackage.Ski;
c. Analisa
Class DownhillSki meupakan child dari class Ski, namun kedua class ini masing-masing
berada pada package yang berbeda. Pada class DownhillSki, mencoba mengakses method
applyWax() parentnya yaitu dari class Ski yang modifier methodnya protected. Oleh karena
itu, meskipun berbebda package, class DownhilSki yang merupakan subclass dari class
Ski, dapat mengaksesnya karena method yang dibuat modifier protected.
Percobaan 5
a. Listing
package differentPackage;
b. Listing
package sportinggoods;
import differentPackage.Ski;
c. Analisa
Pada class Main dan class Ski, masing masing berada pada package yang berbeda. Pada
class Main meginisialisasikan object class Ski dengan kemudian memanggil, method
anggota yang ada pada class Ski yaitu applyWax(). Tetapi, hasil yang didapatkan berupa
error, dikarenakan pada class Ski, method applyWax , modifiernya berupa protected, yang
diaman tidak bisa diakses oleh class yang berbeda package kecuali class tersebut
merupakan subclass dari class Ski. Untuk mengatasi masalah ini, kita dapat mengubah
modifier pada method applyWax pada class main dengan public, sehingga dapat diakses
sekalipun berada pada package yang berbeda.
Percobaan 6
a. Listing
package differentPackage;
b. Listing
package sportinggoods;
import differentPackage.Ski;
c. Output
Pada class Main dan class Ski, masing masing berada pada package yang berbeda. Pada
class Main meginisialisasikan object class Ski dengan kemudian memanggil, method
anggota yang ada pada class Ski yaitu applyWax().Karena modifier method applyWax()
public, maka dapat diakses oleh class Main sekalipun berada pada package yang berbeda.
Latihan1
a. Listing class Geek yang masih ada error
package p1;
Analisa :
Class Geek ini merupakan class yang dijadikan object oleh class NewGeek yang berada
pada package yang bebeda. Pada class NewGeek vaiabelnya nya mencoba mengakses
mehod display yang berada pada class Geek. Akan tetapi terjadi error, disebabkan modifier
method display berupa default yang hanya bisa diakses jika berada pada class Geek saja
atau berada satu package dengan class Geek itu sendiri, sehingga terjadi error. Oleh karena
itu, saya mengubah modifier pada method display menjadi public sehingga dapat diakses
oleh class yang berada pada package berbeda sekalipun. Berikut listing class Geek yang
diubah:
b. Listing class Geek yang sudah dibenarkan
package p1;
c. Listing
package p2;
import p1.Geek;
d. Output
Karena method dapat diakes, maka output nya pun akan muncul
Latihan2
a. Listing class A
package p1;
public class A {
private void display(){
System.out.println("GeeksforGeeks");
}
b. Listing class B
package p1;
import p1.*;
public class B {
public static void main(String[] args) {
A obj=new A();
obj.display();
}
c. Output
Class A ini merupakan class yang dijadikan object oleh class B yang berada pada package
yang sama. Pada class B vaiabelnya nya mencoba mengakses mehod display yang berada
pada class A. Akan tetapi terjadi error, disebabkan modifier method display berupa private
yang hanya bisa diakses jika berada pada class A saja, sehingga terjadi error. Oleh karena
itu, saya mengubah modifier pada method display menjadi public atau bisa juga
menggunakan protected sehingga dapat diakses oleh class yang berada pada package yang
sama.
Untuk itu diperbaiki:
d. Listing baru class A yang ethodna menggunakan modifier public
package p1;
public class A {
public void display(){
System.out.println("GeeksforGeeks");
}
}
e. Listing baru class A yang ethodna menggunakan modifier protected
package p1;
public class A {
protected void display(){
System.out.println("GeeksforGeeks");
}
}
f. Output
Tugas1
Apa yang terjadi bila kedua kode dibawah ini dikompile dan dijalankan dalam satu direktori?
Jelaskan !
a. Lsiting P1 dalam package yang sama
package MyPackage;
public class P1 {
void aFancyMethod(){
System.out.println("What a fancy method");
}
}
b. Lisitng P2 dalam package yang sama
package MyPackage;
public class P2 extends P1 {
public static void main(String[] args) {
P2 p2=new P2();
p2.aFancyMethod();
}
}
c. Output jika didalam satu direktori yang sama
Analisa :
Class P1 ini merupakan class parent yang mempuyai child yaitu class P2 pada package
yang sama. Pada class P2 vaiabelnya nya mencoba mengakses method aFancyMethod()
yang modifiernya berupa default pada class P1.Tidak terjadi error, disebabkan modifier
method display berupa default yang bisa diakses jika berada pada package yang sama dan
class P1 itu sendiri. Oleh karena itu, output berhasil tampil ke layar. Selain itu, pada method
display di class P1 dapat menggunakan modifier protected dan public.
d. Lisitng P1 dalam package MyPackage bisa menggunakan modifier public untuk method
yang dibuat
package MyPackage;
public class P1 {
public void aFancyMethod(){
System.out.println("What a fancy method");
}
}
e. Listing P2 diluar package/tidak berada dalam package manapun bisa mengakses method
class P1, selama modifier methodnya berupa protected atau public.
import MyPackage.*;
public class P2 extends P1 {
public static void main(String[] args) {
P2 p2=new P2();
p2.aFancyMethod();
}
}
f. Output