Anda di halaman 1dari 13

BAB 2

PEMROGRAMAN BERORIENTASI OBJEK I


Tujuan
1. Memahami konsep pemrograman berorientasi objek pada java
2. Mengetahui definisi dan karakteristik objek, kelas, dan atribut
3. Mengetahui perbedaan antara kelas, objek, dan atribut
4. Memahami penggunaan enkapsulasi pada method
5. Mengetahui cara membuat atau sebuah method serta penggunaannya
6. Mengetahui perbedaan macam-macam access modifier pada java

Dalam dunia pemrograman, biasanya kita dihadapkan pada dua jenis metode
pemrograman, yaitu pemrograman prosedural (procedural) dan pemrograman
berorientasi objek (object oriented). Pemrograman prosedural merupakan suatu
metode menulis program yang didasarkan pada serangkaian tugas dalam bentuk
fungsi atau prosedur. Cara pandang pemrograman prosedural yaitu sebuah program
adalah suatu instruksi yang difokuskan pada fungsi dan prosedur, yang keduanya
digunakan untuk memanipulasi data yang bersifat pasif. Programmer harus mem-
break down suatu masalah menjadi masalah yang lebih sederhana.
Berbeda halnya dengan pemrograman berorientasi objek (OOP), fungsi dan data
bukan menjadi dua hal yang terpisah. Fungsi dan data menjadi satu kesatuan yang
disebut sebagai objek aktif. Cara pandang OOP ini yaitu sebuah program
merupakan serangkaian objek yang bekerjasama untuk menyelesaikan suatu masalah.
Dengan kata lain, metode prosedural berfokus pada cara komputer menangani tugas,
sedangkan metode OOP berfokus pada tugas yang kita kembangkan untuk dieksekusi
komputer. Kedua jenis metode pemrograman tersebut dapat digunakan untuk
menangai masalah yang sama, asalkan bahasa pemrograman yang digunakan
mendukung metode-metode tersebut. Contoh bahasa pemrograman yang mendukung
OOP diantaranya : Java, C++, Pascal, Visual Basic .NET, Ruby, Python, PHP, C#,
Delphi, Perl, dsb. Walaupun banyak bahasa pemrograman yang mendukung konsep
PBO tersebut, Java merupakan bahasa yang mendukung penuh PBO, di antaranya
karena Java memiliki beberapa fitur penting yang berbeda dari bahasa standar.
A. Pemrograman Berorientasi Objek (OOP)
Pemrograman Berorientasi Objek (Object Oriented Programming/OOP)
merupakan pemrograman yang berorientasikan kepada objek, dimana semua data
dan fungsi dibungkus dalam class-class atau objek-objek. Setiap object dapat
menerima pesan, memproses data, mengirim, menyimpan dan memanipulasi data.
Beberapa object berinteraksi dengan saling memberikan informasi satu terhadap
yang lainnya. Banyak orang lebih menggunakan pemrograman ini karena lebih
mudah digunakan.
Kelebihan dari pemrograman berorientasi objek antara lain dapat mengatur
memori secara otomatis, penggunaan class cukup ditulis sekali, dapat menambahkan
fitur pada class tanpa mengedit class asal, serta dalam pembuatan library sangat
mudah dalam penggunaannya. Kekurangan dari pemrograman ini yaitu
menghabiskan memori yang lebih besar dibandingkan pemrograman prosedural serta
mudah mengembalikan kode menjadi source code sehingga algoritma yang
digunakan sulit untuk disembunyikan dan mudah dibajak.
B. Istilah-Istilah dalam Pemrograman Berorientasi Objek
1. Class
Pemrograman berorientasi objek menggunakan class untuk menaruh program
sehingga program dapat digunakan kembali dan dipadukan dengan program-
program lain. Class merupakan cetak biru (blue print) atau menggambarkan
ciri-ciri objek secara umum. Ketika menggunakan class, untuk dapat
mengeksekusi kita harus melakukan instansiasi yaitu membuat sebuah object
dari class yang telah kita buat. Class memiliki beberapa karakteristik,
diantaranya anggota class terdiri dari atribut dan method. Tiap-tiap anggota class
memiliki control pengaksesan tersendiri, maksudnya adalah apakah anggota
class tersebut dapat diakses dengan bebas (dengan tipe public) atau hanya dapat
diakses melalui sebuah interface.
Sebagai contoh, dapat kita ibaratkan sebuah class adalah sebuah cetakan agar
dan agar adalah sebuah object dimana proses pembuatan agarnya disebut sebagai
instansiasi. Dalam hal ini sama halnya seperti cetakan agar, sebuah class juga
bisa digunakan berkali kali untuk membuat sebuah object, dimana satu object
dengan yang lainnya tidaklah memiliki keterkaitan meskipun berasal dari kelas
yang sama. Contoh yang lain yaitu kopi, teh, dan kakao merupakan objek dari
class bahan penyegar. Kopi dan objek lainnya memiliki kesamaan atribut
(warna, karakteristik, kandungan kimia, fungsi) dan method untuk mengakses
data pada atributnya, misalnya fungsi untuk menghitung kandungan kimia atau
menginputkan fungsi-fungsinya.

Class utama dari program:








class LatihanClass {
public static void main(String[]args) {
BahanPenyegar kopi = new BahanPenyegar();
Kopi.setJenis(Arabica);
System.out.println(Kopi berjenis
+kopi.getJenis());
}}
2. Objek
Pemahaman tentang pemrograman berbasis objek tentu saja kita mulai dari
objek itu sendiri. Di dalam dunia nyata, semua yang kita lihat adalah objek (alat-
alat laboratorium, orang tua, mesin-mesin, komputer, plastik, buah-buahan, dll).
Object merupakan sesuatu yang memiliki identitas (nama), pada umumnya juga
memiliki data tentang dirinya maupun object lain dan mempunyai kemampuan
untuk melakukan sesuatu dan bisa bekerja sama dengan objek lainnya. Object
adalah implementasi dari class.
Setiap object memiliki dua karakteristik yang utama, yaitu atribut dan
behavior. Atribut merupakan status object dan behavior merupakan tingkah laku
dari object tersebut. Contoh sederhananya yaitu komputer, komputer memiliki
atribut seperti keyboard, mouse, monitor, speaker dan memiliki tingkah laku
seperti kecepatan processor, kemampuan penyimpanan, kemampuan baterai, dan
sebagainya. Pada saat objek diterjemahkan ke dalam konsep pemrograman
berorientasi objek, maka elemen penyusunnya dapat dibedakan menjadi dua
yaitu:
a. Atribut, merupakan ciri-ciri yang melekat pada suatu objek.
b. Method, merupakan fungsi-fungsi yang digunakan untuk memanipulasi
nilai-nilai pada atribut atau untuk melakukan hal-hal yang dapat
dilakukan oleh suatu objek.
Objek dalam konsep pemrograman berorientasi objek memiliki keadaan dan
perilaku yang sama seperti halnya objek di dunia nyata, karena objek dalam
konsep PBO merupakan representasi objek dari dunia nyata. Objek dalam PBO
merepresentasikan keadaan melalui variabel-variabel (atribut), sedangkan
perilakunya direpresentasikan dengan method yang merupakan suatu fungsi
yang berhubungan dengan perilaku objek tersebut maupun berhubungan dengan
atribut dari objek tersebut. Objek yang memiliki kesamaan atribut dan method
dapat dikelompokkan menjadi sebuah class dan untuk menginstansi (membuat)
objek dari class, gunakan operator new.
Sintaks membuat objek dari suatu class:


3. Atribut
Atribut merupakan data atau sifat yang dimiliki oleh sebuah class serta yang
membedakan antara objek satu dengan objek lainnya. Pada contoh class
LatihanClass, atribut dari class tersebut adalah jenis, komposisi, kandungan,
merek, yang ini berarti bahwa setiap objek dari class bahan penyegar (atau
dengan kata lain setiap bahan penyegar yang ada di kehidupan sehari-hari) pasti
memiliki berbagai atribut tersebut.

namaClass namaObjek = new namaClass();
Atribut pada sebuah kelas memiliki izin akses jika kelas digunakan oleh kelas
lain, izin akses itu public, private, dan protected.
a. Atribut Private
Atribut private biasanya digunakan oleh sebuah kelas untuk melindungi
atribut-atributnya agar tidak dapat diakses oleh kelas lain. Sebuah atribut
yang dinyatakan sebagai private hanya dapat diakses secara langsung oleh
kelas yang membungkusnya, sedangkan kelas lainnya tidak dapat mengakses
atribut ini secara langsung, misalkan kelas sebagai berikut:




Berdasarkan struktur tersebut maka yang dapat mengakses elmt dan next
hanyalah kelas Elemen. Jadi, kelas dengan atribut private tersebut hanya
dapat diakses oleh kelas lain yang berada dalam satu package . berarti atribut-
atribut yang private hanya dapat diakses oleh method-method dalam kelas
yang sama, kelas lain masih dapat mengakses melalui method-method
tersebut asal modifier-nya public.
Pertimbangan suatu atribut dideklarasikan private:
i. Bila kelas lain tidak memerlukan atribut tersebut
ii. Melindungi suatu atribut dari kemungkinan nilainya diubah oleh
method lain dari kelas lain

b. Atribut Public
Atribut public adalah atribut yang biasa digunakan oleh sebuah kelas, jika
sebuah atribut diperbolehkan diakses secara langsung oleh kelas lain. Sebuah
atribut yang dinyatakan sebagai public dapat diakses secara langsung oleh
kelas lain di luar kelas yang membungkusnya.





c. Atribut Protected
Atribut protected adalah atribut yang biasa digunakan oleh sebuah class jika
sebuah atribut diperbolehkan diakses secara langsung oleh kelas lain yang
merupakan kelas turunannya. Sebuah atribut yang dinyatakan sebagai
protected tidak dapat diakses secara langsung oleh kelas lain di luar kelas
yang membungkusnya, kecuali kelas yang mengaksesnya adalah kelas
class Elemen
private NilaiMatkul elmt
private Elemen next
Elemen()

class Elemen
public NilaiMatkul elmt
Elemen next
Elemen()

turunan dari kelas yang membungkusnya. Akses protected ini dimaksudkan
untuk melindungi atribut agar tidak dapat diakses secara langsung oleh
sembarang kelas lain, namun diizinkan diakses secara langsung oleh kelas
turunannya.





4. Enkapsulasi
Enkapsulasi dapat dianggap sebagai bungkusan. Enkapsulasi inilah yang
diimplementasikan dalam sebuah class bahwa di dalam sebuah class terdiri dari
atribut dan metode yang dibungkus dalam suatu class. Enkapsulasi bertujuan
untuk melindungi atribut dan metode-metode yang ada di dalam class agar tidak
sembarangan diakses oleh class lain. Setelah variabel dan method dibungkus,
hak akses terhadapnya dapat ditentukan. Enkapsulasi memiliki 2 manfaat, yaitu:
a. Penyembunyian informasi
Penyembunyian ini mengacu kepada perlindungan internal objek, bagian
internal objek dapat berubah tanpa mempengaruhi bagian-bagian program
yang lain.
b. Modularitas
Modularitas berarti objek dapat dikelola secara independen sehingga kita
dapat dengan bebas melakukan modifikasi yang tidak menyebabkan
masalah pada bagian-bagian lain dari sistem.
Pada pemrograman java ini enkapsulasi dilambangkan dengan simbol kurung
kurawal ({ }). Konsep pembungkusan ini pada dasarnya merupakan perluasan
dari tipe data struktur. Dalam kehidupan sehari hari enkapsulasi dapat
dimisalkan sebagai arus listrik pada generator, dan sistem perputaran generator
untuk menghasilkan arus listrik. Kerja arus listrik tidak mempengaruhi kerja dari
sistem perputaran generator, begitu pula sebaliknya. Karena didalam arus listrik
tersebut, kita tidak perlu mengetahui bagaimana kinerja sistem perputaran
generator, apakah generator berputar kebelakang atau ke depan atau bahkan
serong. Begitu pula dalam sistem perputaran generator, kita tidak perlu tahu
bagaimana arus listrik, apakah menyala atau tidak.

5. Method
Pada dasarnya method merupakan fungsi-fungsi yang dikerjakan oleh objek
yang dibuat oleh seorang programmer di dalam suatu class. Method
didefinisikan pada class akan tetapi dipanggil melalui objek. Method memiliki
beberapa peranan, antara lain:
a. Mengubah nilai atribut dari suatu objek
b. Menerima informasi dari objek lain
class Elemen
protected NilaiMatkul elmt
protected Elemen next
Elemen()

c. Mengirim informasi ke objek lain untuk melakukan suatu task
5.1Bagian-Bagian Method
Definisi method terdiri dari method header dan method body. Berikut
beberapa bagian-bagian dari method:
a. Modifier : Untuk memberitahu kompiler bagaimana memanggil method
dan mendefinisikan tipe method
b. Return Type : Sebuah method yang dapat mengembalikan nilai.
returnValueType adalah tipe data dari nilai return method. Beberapa
method melakukan operasi yang diinginkan tanpa kembalinya sebuah
nilai. Dalam hal ini, returnValueType menggunakan kata kunci void.
c. Parameter : Parameter dapat dikatakan seperti penampung. Ketika sebuah
method dipanggil, anda harus menempatkan nilai parameter. Nilai ini
disebut sebagai parameter. Parameter dapat mengacu pada jenis, order,
dan jumlah parameter method. Parameter ini optional, yaitu suatu method
mungkin untuk tidak mengandung method.
d. Method Body : Method body berisi kumpulan pernyataan yang
menentukan method.
Secara garis besar, method memiliki beberapa manfaat, yaitu:
a. Pendekatan reusability. Contohnya yaitu kita tidak perlu lagi membuat
sendiri perhitungan-perhitungan matematika karena dapat langsung
menggunakan method yang termuat dalam kelas Math.
b. Menghindari penulisan bagian kode program yang berulang-ulang
Contoh method dari class LatihanClass, adalah setJenis(String jenis) dan
getJenis() yang berfungsi untuk mengambil nilai atribut jenis. Secara umum
method terdapat 2 macam, yaitu method yang mengembalikan nilai dan method
yang tidak mengembalikan nilai. Contoh method yang mengembalikan nilai
adalah method getJenis(), dimana hasil dari method ini adalah
mengembalikan nilai string dari atribut jenis. Sedangkan contoh method yang
tidak mengembalikan nilai adalah method setJenis(String jenis) , yaitu
dengan ciri tipe data dari method tersebut adalah void.
Bentuk umum dari pembuatan method di dalam kelas:




Pada bentuk umum diatas, tipe adalah tipe data yang akan dikembalikan oleh
method. Sebagai catatan, dalam Java method terbagi menjadi dua: void dan non-
tipe namaMethod(daftar-parameter) {
//kode yang akan dituliskan
}


void. Method void adalah method yang tidak mengembalikan nilai, sedangkan
method non-void adalah method yang mengembalikan nilai. Untuk method void,
tipe data kembalian harus diisi dengan kata kunci void. Apabila method yang
kita buat ditunjukkan untuk mengembalikan seuatu nilai tertentu, maka di dalam
method tersebut harus terdapat statement return, yang diikuti dengan nilai yang
akan dikembalikan, nilai dapat berupa konstanta maupun variabel, yang
digunakan untuk menandakan nilai yang akan dikembalikan oleh method.
5.2Mendefinisikan Method
Setelah mengetahui bentuk umum yang digunakan, disini kita akan langsung
mendefinisikan sebuah contoh method ke dalam kelas yang sebelumnya kita
buat, yaitu kelas Kotak. Kita akan menambahkan method hasilVolume()
untuk menampilkan nilai volume dari objek Kotak. Method ini merupakan
method yang tidak mengembalikan nilai. Maka dari itu, kita harus mengganti
tipe kembalian dengan kata kunci void. Berikut kode program yang dimaksud.

























class Method1 {
public static void main(String[] args) {
Kotak k1, k2, k3;

//instansiasi objek
k1=new Kotak();
k2=new Kotak();

//mengisi data untuk objek k1
k1.panjang=4;
k1.lebar=3;
k1.tinggi=2;

//mengisi data untuk objek k2
k1.panjang=6;
k1.lebar=5;
k1.tinggi=4;

//memanggil method hasilVolume() untuk masing-masing objek
k1.hasilVolume();
k2.hasilVolume();
}
}

public class Kotak {
double panjang;
double lebar;
double tinggi;


//mendefinisikan method void (tidak mengembalikan nilai)
void hasilVolume() {
System.out.println(Volume kotak=
+(panjang*lebar*tinggi));
}}



Pemanggilan method dalam suatu kelas dilakukan dengan menuliskan objek
pemiliknya, dan diikuti oleh operator titik (.) beserta nama method yang akan
dieksekusi. Hasil yang diberikan oleh method hasilVolume() tentu akan berbeda-
beda tergantung dari nilai data yang terkandung dalam masing-masing objek
bersangkutan.
5.3Method Berparameter
Meskipun java mengizinkan method tanpa parameter, namun pada kenyataannya
sebagian besar method yang ditulis dalam program memiliki satu atau beberapa
parameter. Dengan adanya parameter, sebuah method dapat bersifat dinamis dan
general. Artinya, method tersebut dapat mengembalikan nilai yang beragam sesuai
dengan nilai parameter yang dilewatkannya. Untuk lebih memperjelas pembahasan,
berikut pendefinisian method tanpa parameter.


Secara sintaks, method diatas benar dan akan mengembalikan nilai 50.
Namun, dilihat dari sisi desain program, method diatas dikatakan tidak fleksibel atau
tidak bersifat general. Pasalnya, method tersebut hanya dapat digunakan untuk
persegi panjang yang memiliki ukuran 10x5 saja. Untuk mengatasi hal semacam ini,
maka Java mengizinkan kita untuk menempatkan parameter di dalam sebuah method
agar method diatas dapat digunakan untuk segala ukuran persegi panjang. Berikut ini
kode yang seharusnya dituliskan untuk mendefinisikan method di atas.


Melalui cara seperti ini, kita dapat melewatkan nilai berapapun ke dalam
method tersebut. Sebagai contoh, perhatikan kode berikut:


Luas1 merupakan variabel penampung untuk perhitungan luas persegi
panjang dengan ukuran 10x5, luas2 dengan ukuran 4x3, padahal method yang
didefinisikan hanya satu, bukan tiga buah method. Terdapat dua istilah yang perlu
diketahui dalam bekerja dengan method, yaitu parameter dan argumen. Parameter
adalah variabel yang didefinisikan pada saat method dibuat, sedangkan argumen
adalah nilai yang digunakan pada saat pemanggilan method. Disini, variabel
panjang dan lebar disebut parameter dan nilai 10 dan 5 disebut argumen.
int luasPersegiPanjang() {
return 10*5;
}

int luasPersegiPanjang(int panjang, int lebar) {
return panjang*lebar;
}


int luas1, luas2;
luas1=luasPersegiPanjang(10,5); //menghasilkan nilai 50
luas2=luasPersegiPanjang(4,3); //menghasilkan nilai 12
Sekarang kita akan mengimplementasikan konsep diatas ke dalam kelas
PersegiPanjang. Disini data panjang, lebar, dan tinggi akan kita isikan
melalui sebuah method. Berikut ini kode program yang dapat digunakan untuk
melakukan hal tersebut.















Pada kode program diatas kita mendefinisikan method yang tidak
mengembalikan nilai dan memiliki tiga buah parameter, yaitu p, l, dan t. Parameter
ini selanjutnya dapat diisi dengan nilai yang dikehendaki pada saat proses
pemanggilan method tersebut. Dalam contoh diatas, kita melewatkan nilai 4, 3, dan 2
sebagai argumen dari method isiData() untuk mengisikan data panjang,
lebar, dan tinggi dari objek pp.




class PersegiPanjang {
double panjang;
double lebar;
double tinggi;

//mendefinisikan method dengan parameter
Void isiData(double p, double l, double t) {
panjang = p;
lebar = l;
tinggi = t;
}
Double hitungVolume() {
Return (panjang*lebar*tinggi);
}
}

class Method2 {
Public static void main(String[] args) {
PersegiPanjang pp;

//instansiasi objek
pp = new PersegiPanjang();

//memanggil method isiData()
pp.isiData(4,3,2);

System.out.println(Volume persegi panjang :
+pp.hitungVolume());
}
}
Contoh method yang memanggil dari dua class yang berbeda:












5.4Method Getter dan Method Setter
Bila membuat kelas Java, biasakan attributnya diset dengan access level
selain public, misalnya private atau protected. Salah satu alasannya adalah untuk
security. Nah, untuk mengakses atribut ini dibuatlah method getter() dan
setter(). Method jenis getter() merupakan method-method yang berfungsi untuk
mendapatkan informasi dari class, sedangkan jenis setter() berfungsi untuk
menentukan isi atribut dalam class. Kedua method ini (Getter dan Setter) diset
dengan acces level public.

Berikut contoh method setter getter:
















Pada class 1:

public class Method1 {
int a=20/5;
}

Pada class 2:

public class Method2 {
public static void main(String[]args) {
Method 1 main=new Method1();
System.out.println(Hasilnya adalah
+main.a);
}}
Pada class GetterSetter:

public class GetterSetter {
private String nim;
private String nama;
protected String alamat;
protected String jurusan;

public String getNim(){
return nim;
}

public void setNim(String nim) {
this.nim=nim;
}
public String getNama(){
return nama;
}

public void setNama(String nama) {
this.nama=nama;
}











































public String getAlamat(){
return alamat;
}

public void setAlamat(String alamat) {
this.alamat=alamat;
}
public String getJurusan(){
return jurusan;
}

public void setJurusan(String jurusan) {
this.jurusan=jurusan;
}
}
Pada class PemanggilanGetterSetter:

public class PemanggilanGetterSetter {
public static void main(String[] args){
//mengeset nilai atribut objek-objek instance kelas

GetterSetter objek1=new GetterSetter();
objek1.setNim(F34120001);
objek1.setNama(AAA);
objek1.setAlamat(Balebak);
objek1.setJurusan(TIN);

GetterSetter objek2=new GetterSetter();
objek2.setNim(F24120001);
objek2.setNama(BBB);
objek2.setAlamat(Bateng);
objek2.setJurusan(ITP);

//mengambil nilai atribut objek-objek instance kelas

String nim1=objek1.getNim();
String nama1=objek1.getNama();
String alamat1=objek1.getAlamat();
String jurusan1=objek1.getJurusan();

String nim2=objek2.getNim();
String nama2=objek2.getNama();
String alamat2=objek2.getAlamat();
String jurusan2=objek2.getJurusan();

//menampilkan output nilai atribut setiap objek

System.out.println(NIM: +nim1+ \tNama: +nama1+
\tAlamat: +alamat1+ \tJurusan: +jurusan1);
System.out.println(NIM: +nim2+ \tNama: +nama2+
\tAlamat: +alamat2+ \tJurusan: +jurusan2);
}
Dalam kelas ini terdapat empat buah atribut yaitu:
nim akses level: private
nama akses level: private
alamat akses level: protected
Jurusan akses level: protected
Kemudian terdapat method getter dan setter yang akses levelnya diset public.
public String getNim() mengambil nilai atribut nim
public String getNama() mengambil nilai atribut nama
public String getAlamat() mengambil nilai atribut alamat
public String getJurusan() mengambil nilai atribut Jurusan
public void setNim(String nim) mengeset nilai atribut nim
public void setNama(String nama) mengeset nilai atribut nama
public void setAlamat(String alamat) mengeset nilai atribut alamat
public void setJurusan(String jurusan) mengeset nilai atribut Jurusan
Sekarang kita perhatikan kelas PemanggilanGetterSetter. Kelas ini tidak secara
langsung mengakses atribut pada kelas GetterSetter. Untuk mengaksesnya digunakan
method getter dan setter yang sudah disediakan di kelas GetterSetter.
6. Access Modifier
Yang dimaksud dengan access modifier adalah pengaturan hak akses class maupun
method. Akses ini digunakan untuk menentukan hubungan suatu unsur kelas dengan
unsur kelas lainnya, menunjukkan sifat tertentu dari class, method, atau atributnya.
Terdapat 4 akses yang tersedia yaitu default, public, protected, dan private. Untuk
lebih jelasnya dapat dilihat dari kedua tabel berikut:
No Modifier
Pada Class dan
Interface
Pada Method dan Variabel
1 Default Dapat diakses oleh yang
sepaket
Diwarisi oleh subkelas di paket
yang sama, dapat diakses oleh
method-method yang sepaket
2 Public Dapat diakses dimanapun Diwarisi oleh subkelasnya, dapat
diakses dimanapun
3 Protected Hanya dapat diakses di
kelas itu
Diwarisi oleh subkelasnya, dapat
diakses oleh method-method yang
sepaket
4 Private Tidak dapat diakses sama
sekali oleh kelas lain
Tidak dapat diakses dimanapun
kecuali oleh method-method yang
ada dalam kelas itu sendiri.

Aksesabilitas Default Public Protected Privat
Dari kelas yang sama Ya Ya Ya Ya
Dari sembarang kelas dalam Ya Ya Ya Tidak
paket yang sama
Dari sembarang kelas di luar
paket
Tidak Ya Tidak Tidak
Dari subkelas dalam paket yang
sama
Ya Ya Ya Tidak
Dari subkelas di luar paket Tidak Ya Ya Tidak

Anda mungkin juga menyukai