Anda di halaman 1dari 28

LAPORAN PRAKTIKUM

PEMROGRAMAN BERORIENTASI OBJEK

Inheritance

Nama : Muhammad Ramadhan


NRP :3120600043
Kelas : 2 D4 ITB
Tugas Pendahuluan
1. Jelaskan mengenai konsep inheritance !
Jawab :
Inheritance (Pewarisan) merupakan salah satu dari tiga konsep dasar OOP. Konsep
inheritance ini mengadopsi dunia riil dimana suatu entitas/obyek dapat mempunyai
entitas/obyek turunan. Dengan konsep inheritance, sebuah class dapat mempunyai class
turunan. Suatu class yang mempunyai class turunan dinamakan parent class atau base class.
Sedangkan class turunan itu sendiri seringkali disebut subclass atau child class. Dalam
dunia riil, suatu entitas turunan dapat mewarisi apa-apa yang dipunyai dari entitas
induknya. Misalkan saja antara entitas Bapak dan entitas Anak. Entitas anak dapat
mewarisi apa-apa yang dipunyai oleh entitas Bapaknya. Demikian juga dalam konsep
inheritance, suatu subclass dapat mewarisi apa-apa yang dipunyai oleh parent class. Inilah
yang terpenting dari konsep inheritance. Karena suatu subclass dapat mewarisi apa-apa
yang dipunyai oleh parent class-nya, maka member dari suatu subclass adalah terdiri dari
apa-apa yang ia punyai dan juga apa-apa yang ia warisi dari class parent-nya.
Kesimpulannya, boleh dikatakan bahwa suatu subclass adalah tidak lain hanya memperluas
(extend) parent class-nya.
2. Deklarasikan dalam program java, sebuah class B, yang merupakan sub class dari class
A?
Jawab:
a. Listing clas A (parent)
public class A {
void jalan(){
System.out.println("Jalan-Jalan....");
}
}

b. Listing class B(child dari class A)


public class B extends A{
void renang(){
System.out.println("Berenang....");
}
}
Percobaan 1
a. Listing class Animal
public class Animal {
void eat(){
System.out.println("Eating....");
}
}

b. Listing class Dog


public class Dog extends Animal{
void bark(){
System.out.println("barking....");
}
}

c. Listing class TestInheritance


public class TestInheritance {
public static void main(String[] args) {
Dog d=new Dog();
d.bark();
d.eat();
}
}

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....");
}
}

b. Listing class Dog


public class Dog extends Animal{
void bark(){
System.out.println("barking....");
}
}
c. Listing class Cat
public class Cat extends Animal{
void meow(){
System.out.println("meowing....");
}
}

d. Listing class TestInheritance3


public class TestInheritance3 {
public static void main(String[] args) {
Cat c=new Cat();
c.meow();
c.eat();
}
}

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);
}
}

b. Listing class MountainBike


public class MountainBike extends Bicycle {
public int seatHeight;
public MountainBike(int gear,int speed,int startHeight){
super(gear,speed);
seatHeight=startHeight;
}
public void setHeight(int newValue){
seatHeight=newValue;
}

@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;
}

public int getSaldo() {


return this.saldo;
}
public void simpanUang(int jumlah){

this.saldo+=jumlah;
}
public boolean ambilUang(int jumlah){
if(this.saldo<jumlah)
return false;
else{
this.saldo-=jumlah;
return true;
}
}
}

b. Listing
package perbankan;

public class PengambilanUang extends Tabungan {


public int proteksi;
public PengambilanUang(int saldo) {
super(saldo);
}
public PengambilanUang(int saldo,int tingkatBunga) {
super(saldo-tingkatBunga);
this.proteksi=tingkatBunga;
}

@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;

public class TesTugas {


public static void main(String[] args) {
PengambilanUang tabungan=new PengambilanUang(5000,1000);
System.out.println("Uang yang ditabung : 5000");
System.out.println("Uang yang diproteksi : 1000");
System.out.println("------------------------");
System.out.println("Uang yang akan diambil :
4500"+tabungan.ambilUang(4500));
System.out.println("Saldo sekarang :"+tabungan.getSaldo());
System.out.println("------------------------");
System.out.println("Uang yang akan diambil :
2500"+tabungan.ambilUang(2500));
System.out.println("Saldo sekarang :"+tabungan.getSaldo());
}
}

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;
}

public void setR(double r) {


this.r = r;
}

public double getR() {


return this.r;
}
public double getDiameter(){
return 2*r;
}
public double getKeliling(){
return 3.14*this.getDiameter();
}
public double getLuas(){
return 3.14*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 double getTinggi() {


return this.tinggi;
}
public double getVolume(){
return 3.14*super.getR()*super.getR()*this.tinggi;
}
}
c. Listing Kerucut
public class Kerucut extends Lingkaran {
private double 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;
}

public double getTinggi() {


return tinggi;
}
public double getVolume(){
return (3.14*super.getR()*super.getR()*this.tinggi)/3;
}
}

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 :

(super.getLuas()*this.tinggi)/3 atau (3.14*super.getR()*super.getR()*this.tinggi)/3


Keduanya cara sama-sama akn menghasilkan value volume yang sama.
LAPORAN PRAKTIKUM
PEMROGRAMAN BERORIENTASI OBJEK

Kontrol Pengaksesan

Nama : Muhammad Ramadhan


NRP :3120600043
Kelas : 2 D4 ITB
Tugas Pendahuluan
1. Jelaskan mengenai kontrol pengaksesan !
Jawab :
Kontrol akses dapat mengatur siapa saja yang dapat mengakses atau mengubah nilai suatu
member dari objek. Dengan demikian, dapat dicegah kemungkinan penyalahgunaan fungsi
objek itu sendiriUntuk menentukan kontrol akses suatu member class perlu ditambahkan
access specifier setiap kali mendeklarasikan suatu member class. ada 4 buah access
specifier yang dikenal dalam java yaitu private, protected, public dan tanpa access
specifier.
2. Jelaskan mengenai kontrol pengaksesan private, default, protected dan public ?
Jawab:
• Private adalah acces modifier yang paling ketat. private artinya method dan variabel
hanya dapat diakses oleh class itu sendiri.
• Public adalah acces modifier yang dapat diakses oleh class manapun.
• Default adalah acces modifier yang hanya bisa diakses di dalam package yang
sama. Jika tidak menggunakan modifier apapun, maka inilah yang disebut dengan
default.
• Protected adalah acces modifier yang bisa diakses di dalam package ataupun di luar
package namun hanya melalui inheritance
Percobaan 1
a. Listing class Complex
public class Complex {
private double real,imaginary;

public Complex(double r, double i){


real=r;
imaginary=i;
}
public Complex add(Complex c){
return new Complex(real+c.real,imaginary+c.imaginary);
}

b. Listing 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
}
}

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;
}

b. Listing class SubComplex


public class SubComplex {
SubComplex(double r,double i){
//real=r;//Trouble!
}
}

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;

public class Ski {


void applyWax(){

}
}

b. Listing
package differentPackage;

public class DownhillSki extends Ski {


void tuneup(){
applyWax();
}
}

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;

public class Ski {


protected void applyWax(){

}
}

b. Listing
package sportinggoods;

import differentPackage.Ski;

public class DownhillSki extends Ski {


void tuneup() {
applyWax();
}
}

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;

public class Ski {


protected void applyWax(){
System.out.println("Tes");
}
}

b. Listing
package sportinggoods;
import differentPackage.Ski;

public class Main {


public static void main(String[] args) {
new Ski().applyWax();
}
}

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;

public class Ski {


public void applyWax(){
System.out.println("Tes");
}
}

b. Listing
package sportinggoods;

import differentPackage.Ski;

public class Main {


public static void main(String[] args) {
new Ski().applyWax();
}
}

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;

public class Geek {


void display(){
System.out.println("Hello World");
}
}

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;

public class Geek {


public void display(){
System.out.println("Hello World");
}
}

c. Listing
package p2;

import p1.Geek;

public class GeekNew {


public static void main(String[] args) {
Geek obj=new Geek();
obj.display();
}
}

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");
}
}

atau bisa menggunakan modifier protected untuk method yang dibuat


package MyPackage;
public class P1 {
protected 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

Anda mungkin juga menyukai