M O D I F I E R
Pembahasan
Salah satu hubungan class yang pernah kita pelajari adalah inheritance (pewarisan). Semua yang ada di dalam class (atribut dan method) disebut member. Biasanya akan ada tingkatan akses yang disebut modifier.
Pada hubungan inheritance, semua member di dalam class induk akan bisa diakses oleh class anak (subclass), kecuali memeber tersebut diberikan modifier private.
Perlu diingat: Modifier tidak hanya bisa diberikan kepada member saja. Tapi juga bisa diberikan kepada interface, enum, dan class itu sendiri.
Ada 3 Macam Modifier dalam Java
Secara umum ada 3 macam modifier yang digunakan dalam Java: public, private, dan protected. Berikut ini tabel jangkauan untuk masing-masing modifier:
Keterangan:
- Y artinya bisa diakses;
- N artinya tidak bisa diakses;
- Subclass artinya class anak;
- World artinya seluruh package di aplikasi.
# Public
Modifier public akan membuat member dan class bisa di akses dari mana saja.
Contoh:
package modifier;
class Person {
public String name;
public changeName(String newName){
this.name = newName;
}
}
Pada class Preson terdapat dua member, yaitu:
- atribut name
- method changeName()
Kedua member tersebut kita berikan modifier public. Artinya mereka akan bisa diakses dari mana saja.
Pada class diagram, modifier public digambarkan dengan simbol plus (+).
Contoh:
Semua member dalam class Player memiliki modifier public. Perhatikan simbol + yang ada di depannya.
# Private
Modifier private akan membuat member hanya bisa diakses oleh dari dalam class itu sendiri.
Perlu diingat : Modifier private tidak bisa diberikan kepada class, enum, dan interface. Modifier private hanya bisa diberikan kepada member class.
Saya akan mencontohkan dari package Bangun Datar yang Blog saya sebelumnya
Untuk melihat lebih lanjut source code Bangun Datar bisa klik link di bawah ini :
Penjelasan :
- Jika Class Persegi di bagian float sisi diberi Private maka akan terjadi Error di class pemanggilan (class Proses)
- Maka di dalam class Proses harus di hapus di bagian atribut sisi biar bisa dijalankan programnya.
- Jika ingin memanggil class Persegi deklarasi private di bagian float sisi harus di hapus biar program bisa di proses.
# Protected
Modifier protected akan membuat member dan class hanya bisa diakses dari:
- Class itu sendiri.
- Sub class atau class anak.
- Package (class yang berada satu package dengannya).
Modifier protected juga hanya boleh digunakan pada member saja.
Contoh:
class PersegiPanjang extends BangunDatar {protected float panjang;float lebar;@Overridefloat luas(){float luas = panjang * lebar;System.out.println("Luas Persegi Panjang:" + luas);return luas;}@Overridefloat keliling(){float kll = 2*panjang + 2*lebar;System.out.println("Keliling Persegi Panjang: " + kll);return kll;}}
Pada contoh di atas, kita memberikan modifier protected pada atribut Panjang.
Apabila kita coba mengakses dari class yang satu package dengannya, maka tidak akan terjadi error.
Namun, apabila kita mencoba mengakses dari luar package seperti ini:
Maka akan terjadi Error.
Oke Untuk Berikutnya akan Saya tunjukkan Package BangunDatar menggunakan beberapa Modifier.
# Class BangunDatar
package BangunDatar;public class BangunDatar {float luas(){System.out.println();System.out.println("============================");System.out.println("Menghitung laus bangun datar");return 0;}float keliling(){System.out.println("Menghitung keliling bangun datar");System.out.println("============================");System.out.println();return 0;}}
# Class Persegi
package BangunDatar;class Persegi extends BangunDatar {private float sisi;@Overridefloat luas(){float luas = sisi * sisi;System.out.println("Luas Persegi: " + luas);return luas;}@Overridefloat keliling(){float keliling = 4 * sisi;System.out.println("Keliling Persegi: " + keliling);return keliling;}}
# Class Lingkaran
package BangunDatar;public class Lingkaran extends BangunDatar{// jari-jari lingkaranprotected float r;@Overridefloat luas(){float luas = (float) (Math.PI * r * r);System.out.println("Luas lingkaran: " + luas);return luas;}@Overridefloat keliling(){float keliling = (float) (2 * Math.PI * r);System.out.println("Keliling Lingkaran: " + keliling);return keliling;}protected String getName(Object r2) {return null;}}
# Class PersegiPanjang
package BangunDatar;class PersegiPanjang extends BangunDatar {protected float panjang;protected float lebar;@Overridefloat luas(){float luas = panjang * lebar;System.out.println("Luas Persegi Panjang:" + luas);return luas;}@Overridefloat keliling(){float kll = 2*panjang + 2*lebar;System.out.println("Keliling Persegi Panjang: " + kll);return kll;}}
# Class Segitiga
package BangunDatar;public class Segitiga extends BangunDatar {float alas;float tinggi;@Overridefloat luas() {float luas = (float) 1/2 * (alas * tinggi);System.out.println("Luas Segitiga: " + luas);return luas;}@Overridefloat keliling(){float miring = (float) Math.sqrt((alas*alas) + (tinggi*tinggi));float keliling = (float) alas+tinggi+miring;System.out.println("Keliling Lingkaran: " + keliling);return keliling;}}
# Class Proses
package BangunDatar;public class Proses {public static void main(String[] args) {// membuat objek bangun datarBangunDatar bangunDatar = new BangunDatar();// membuat objek persegi dan mengisi nilai propertiPersegi persegi = new Persegi();// membuat objek Lingkaran dan mengisi nilai propertiLingkaran lingkaran = new Lingkaran();lingkaran.r = 22;// membuat objek Persegi Panjang dan mengisi nilai propertiPersegiPanjang persegiPanjang = new PersegiPanjang();persegiPanjang.panjang = 8;persegiPanjang.lebar = 4;// membuat objek Segitiga dan mengisi nilai propertiSegitiga Segitiga = new Segitiga();Segitiga.alas = 12;Segitiga.tinggi = 8;// memanggil method luas dan kelilingbangunDatar.luas();bangunDatar.keliling();System.out.println();persegi.luas();persegi.keliling();System.out.println("============================");System.out.println();lingkaran.luas();lingkaran.keliling();System.out.println("============================");System.out.println();persegiPanjang.luas();persegiPanjang.keliling();System.out.println("============================");System.out.println();Segitiga.luas();Segitiga.keliling();System.out.println("****************************");}}
# Output Yang Keluar
Penjelasan Singkat Untuk Penerapan Modifier di Java
Class Lain :
package com.tutorial;public class Lain {// bagian ini dapat diakses oleh siapa punpublic static void methodPublic() {System.out.println("Lain : Public");}// ini hanya dapat diakses oleh class yang bersangkutanprivate static void methodPrivate() {System.out.println("Lain : Private");}// ini hanya dapat diakses oleh class dalam package yang samastatic void methodDefault() {System.out.println("Lain : Default");}// ini hanya dapat diakses oleh class dalam package yang sama// dan subclassnyaprotected static void methodPreotected() {System.out.println("Lain : Protected");}}
Class Main :
package com.tutorial;public class Main {public static void main (String[] args){System.out.println();// public, private, default, dan protected// dengan access modifier public, dapat diaksesLain.methodPublic();// dengan access modifier private, tidak dapat diakses//Lain.methodPrivate();// karena ada dalam package yang sama, maka dapat diakses// jika Di package yang lain tidak akan bisa diaksesLain.methodDefault();// karena ada dalam package yang sama, maka dapat diakses// jika Di package yang lain tidak akan bisa diaksesLain.methodPreotected();System.out.println();}}
Output :
Sumber :
Moh. Shohibul Wafa, S. M. (2022). MODUL 4 – TINGKATAN AKSES MEMBER DAN
CLASS. 1-8.
Muhardian, A. (2022, Maret 22). Belajar Java OOP: Memahami Tingkatan Akses Member dan Class (Modifier). Retrieved from Petani kode: https://www.petanikode.com/java-oop-modifier/