- private : hanya dapat diakses oleh kelas itu sendiri
- protected : hanya dapat diakses dalam package dan kelas turunannya
- public : dapat diakses dimanapun
- default : hanya dapat diakses dalam package saja
Manfaat dari encapsulation :
- Modularitas : Source code dari sebuah class dapat dikelola secara independen dari source code class yang lain. Perubahan internal pada sebuah class tidak akan berpengaruh bagi class yang menggunakannya.
- Information Hiding : Penyembunyian informasi yang tidak perlu diketahui objek lain.
Untuk mengakses informasi dapat menggunakan perantara method yang dikenal dengan setter dan getter.
Sebagai contoh, buatlah 3 kelas masing-masing di package yang berbeda.
Kelas bangun berada di package1, atributnya diberi akses modifier protected
package package1;
/**
*
* @author Wim Sonevel
*/
public class bangun {
protected String nama;
public bangun(String nama){
this.nama = nama;
}
public String getNama(){
return nama;
}
}
Kelas duaD berada di package1 juga dengan atributnya diberi akses modifier private dan subclass dari kelas bangun
package package1;
/**
*
* @author Wim Sonevel
*/
public class duaD extends bangun{
private int panjang;
private int lebar;
private int sisi;
public duaD(String nama, int sisi){
super(nama);
this.sisi = sisi;
}
public duaD(String nama, int panjang, int lebar){
super(nama);
this.panjang = panjang;
this.lebar = lebar;
}
protected void hitungLuasPersegi(){
int luas = sisi * sisi;
System.out.println("Luas = "+luas);
}
protected void hitungLuasPersegiPanjang(){
int luas = panjang * lebar;
System.out.println("Luas = "+luas);
}
protected void hitungKelilingPersegi(){
int keliling = 4 * sisi;
}
protected void hitungKelilingPersegiPanjang(){
int keliling = 2 * (panjang+lebar);
}
public int getSisi(){
return sisi;
}
public int getPanjang(){
return panjang;
}
public int getLebar(){
return lebar;
}
}
Kelas TigaD berada di package2 dengan atribut diberi akses modifier private dan subclass dari kelas duaD. Karena kelas duaD ada di package1 maka kita perlu import untuk memanggil kelas tersebut.
package package2;
import package1.*;
/**
*
* @author Wim Sonevel
*/
public class tigaD extends duaD{
public int tinggi;
public tigaD(String nama, int sisi){
super(nama, sisi);
}
public tigaD(String nama, int panjang, int lebar, int tinggi){
super(nama, panjang, lebar);
this.tinggi = tinggi;
}
public void hitungVolumeKubus(){
int volume = (int) Math.pow(getSisi(),2);
System.out.println("Volume Kubus = "+volume);
}
public void hitungVolumeBalok(){
int volume = getPanjang() * getLebar() * tinggi;
System.out.println("Volume Balok = "+volume);
}
}
Terakhir kelas mainApp berada di package3. Kelas ini merupakan main class yang akan digunakan untuk memanggil kelas lainnya.
package package3;
import package1.duaD;
import package2.tigaD;
/**
*
* @author Wim Sonevel
*/
public class mainApp {
public static void main(String[]args){
duaD dua = new duaD("Persegi", 4);
//this is protected, so it can't be access
//dua.hitungLuasPersegi();
tigaD tiga = new tigaD("Kubus", 4);
tiga.hitungVolumeKubus();
tigaD tiga2 = new tigaD("Balok", 3, 4, 5);
tiga2.hitungVolumeBalok();
}
}
Untuk melihat hasilnya silahkan jalankan kelas mainApp.
Output :
Volume Kubus = 16
Volume Balok = 60
Sekian dan semoga bermanfaat.
Happy Coding :)
Tags:
Java