Modifier
Sekarang mungkin Anda sudah cukup familiar dengan keyword public yang muncul hampir di semua contoh sebelumnya :
public class Main
Keyword public merupakan sebuah access modifier, yang berarti itu digunakan untuk mengatur level akses untuk class, atribut, method dan constructor. Kita membagi modifier ke dalam dua grup :
- Access Modifiers – mengontrol level akses
- Non-access Modifiers – tidak mengontrol level, tapi menyediakan fungsionalitas lain.
Access Modifier
Untuk class, Anda dapat menggunakan public atau default :
Modifier | Deskripsi |
public | Class dapat diakses oleh class lain |
default | Class hanya dapat diakses oleh class yang ada dalam package yang sama. Ini digunakan ketika Anda tidak menspesifikasikan sebuah modifier. Anda akan mempelajari lebih banyak lagi tentang package di tutorial package |
Contoh modifier public :
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Output :
Hello World
Contoh modifier default :
class classDefault {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Output :
Hello World
Untuk atribut, method, dan constructor, Anda bisa menggunakan salah satunya dari tabel berikut ini :
Modifier | Deskripsi |
public | Kode dapat diakses oleh semua class |
private | Kode hanya dapat diakses di dalam class yang mendeklarasikannya |
default | Kode hanya dapat diakses dalam package yang sama. Ini digunakan ketika Anda tidak menspesifikasikan sebuah modifier. |
protected | Kode yang dapat diakses dalam package yang sama dan subclass-nya. Anda akan mempelajari tentang subclass dan superclass di tutorial inheritance |
Contoh modifier public :
public class Main {
public String namaDepan = "Budi";
public String namaBelakang = "Budiman";
public String email = "budiman@budi.com";
public int umur = 25;
}
class Second {
public static void main(String[] args) {
Main objectSaya = new Main();
System.out.println("Nama : " + objectSaya.namaDepan + " " + objectSaya.namaBelakang);
System.out.println("Email : " + objectSaya.email);
System.out.println("Umur : " + objectSaya.umur);
}
}
Output :
Nama : Budi Budiman
Email : budiman@budi.com
Umur : 25
Contoh modifier private :
public class Main {
private String namaDepan= "Budi";
private String namaBelakang = "Budiman";
private String email = "budiman@budi.com";
private int umur = 24;
public static void main(String[] args) {
Main objekSaya = new Main();
System.out.println("Nama: " + objekSaya.namaDepan + " " + objekSaya.namaBelakang);
System.out.println("Email: " + objekSaya.email);
System.out.println("Umur: " + objekSaya.umur);
}
}
Output :
Nama: Budi Budiman
Email: budiman@budi.com
Umur: 24
Contoh modifier default :
class Orang {
String namaDepan= "Budi";
String namaBelakang = "Budiman";
String email = "budiman@budi.com";
int umur = 24;
public static void main(String[] args) {
Orang objekSaya = new Orang();
System.out.println("Nama: " + objekSaya.namaDepan + " " + objekSaya.namaBelakang);
System.out.println("Email: " + objekSaya.email);
System.out.println("Umur: " + objekSaya.umur);
}
}
Output :
Nama: Budi Budiman
Email: budiman@budi.com
Umur: 24
Contoh modifire protected :
class Orang {
protected String namaDepan = "Budi";
protected String namaBelakang = "Budiman";
protected String email = "budiman@budi.com";
protected int umur= 24;
}
class Siswa extends Orang {
private int tahunLulus= 2019;
public static void main(String[] args) {
Siswa objekSaya = new Siswa();
System.out.println("Nama: " + objekSaya.namaDepan + " " + objekSaya.namaBelakang);
System.out.println("Email: " + objekSaya.email);
System.out.println("Age: " + objekSaya.umur);
System.out.println("Tahun Lulus : " + objekSaya.tahunLulus);
}
}
Output :
Nama: Budi Budiman
Email: budiman@budi.com
Age: 24
Tahun Lulus : 2019
Non-Access Modifier
Untuk class, Anda dapat menggunakan keyword final atau abstract :
Modifier | Deskripsi |
final | Class tidak dapat diwariskan ke class lainnya |
abstract | Class tidak dapat digunakan untuk membuat object (Untuk mengakses class abstract, harus diwariskan dari class lainnya). Anda akan mempelajari lebih banyak tetang inheritance (pewarisan) dan abstraction (abstraksi) di tutorial inheritance dan abstraction) |
Contoh modifier final :
final class Kendaraan {
protected String merk = "Toyota";
public void klakson() {
System.out.println("Tiin, tiin!");
}
}
class Main extends Kendaraan {
private String namaModel = "Avanza";
public static void main(String[] args) {
Main mobilSaya = new Main();
mobilSaya.klakson();
System.out.println(mobilSaya.merk+ " " + mobilSaya.namaModel);
}
}
Output :
Main.java:8: error: cannot inherit from final Kendaraan
class Main extends Kendaraan {
^
1 error
Contoh modifier abstract :
// abstract class
abstract class Main {
public String namaDepan = "Budi";
public String namaBelakang = "Budiman";
public String email = "budiman@budi.com";
public int umur = 28;
public abstract void belajar(); // abstract method
}
// Subclass (inherit from Person)
class Siswa extends Main {
public int tahunLulus = 2018;
public void belajar() {
System.out.println("Belajar sepanjang hari");
}
}
class Second {
public static void main(String[] args) {
// membuat objek dari class Siswa (yang mewarisi (inherit) atribut dan method dari Main)
Siswa objekSaya = new Siswa();
System.out.println("Nama : " + objekSaya.namaDepan + " " + objekSaya.namaBelakang);
System.out.println("Email: " + objekSaya.email);
System.out.println("Umur : " + objekSaya.umur);
System.out.println("Tahun Lulus: " + objekSaya.tahunLulus);
objekSaya.belajar(); // memanggil method abstract
}
}
Output :
Nama : Budi Budiman
Email: budiman@budi.com
Umur : 28
Tahun Lulus: 2018
Belajar sepanjang hari
Untuk atribut dan method, Anda bisa menggunakan salah satu dari berikut ini :
Modifier | Deskripsi |
final | Atribut dan method tidak dapat diganti/dimodifikasi |
static | Atribut dan method milik class, bukan object |
abstract | Hanya dapat diakses dalam class abstrak, dan hanya bisa digunakan pada method. Method tidak memiliki bentuk, sebagai contoh abstract void run();. Bentuknya disediakan oleh subclass (yang diwariskan dari class lainnya). |
transient | Atribut dan method dilewati ketika membuat serial object yang mengandung atribut dan method tersebut. |
synchronized | Method hanya dapat diakses oleh satu thread dalam satu waktu |
volatile | Nilai dari sebuah atribut di-cache thread-local, dan selalu dibaca dari “Memory utama” |
Final
Jika Anda tidak ingin nilai atribut tidak dapat diganti, deklarasikan atribut sebagai final. Contoh :
public class Main {
final int x = 10;
final double PI = 3.14;
public static void main(String[] args) {
Main objectSaya = new Main();
objectSaya.x = 50; // akan menghasilkan error : cannot assign value to a final variable
objectSaya.PI = 25; // akan menghasilkan error : cannot assign value to a final variable
System.out.println(objectSaya.x);
}
}
Output :
Main.java:7: error: cannot assign a value to final variable x
objectSaya.x = 50; // akan menghasilkan error : cannot assign value to a final variable
^
Main.java:8: error: cannot assign a value to final variable PI
objectSaya.PI = 25; // akan menghasilkan error : cannot assign value to a final variable
^
2 errors
Static
Sebuah method static berarti bisa diakses tanpa harus membuat sebuah class object, tidak seperti public. Contoh :
public class Main {
// method static
static void methodStaticSaya() {
System.out.println("Method static dapat dipanggil tanpa harus membuat object");
}
// method public
public void methodPublicSaya() {
System.out.println("Method public harus dipanggil dengan membuat object");
}
// method utama
public static void main(String[] args) {
methodStaticSaya(); // Memanggil method static
// methodPublicSaya(); akan menghasilkan error
Main objectSaya = new Main(); // Membuat object dari Main
objectSaya.methodPublicSaya(); // Memanggil method public
}
}
Output :
Method static dapat dipanggil tanpa harus membuat object
Method public harus dipanggil dengan membuat object
Abstract
Sebuah method abstract milik sebuah class abstract dan tidak memiliki bentuk. Bentuk-nya disediakan oleh subclass. Contoh :
// Kode dari nama file: Main.java
// abstract class
abstract class Main {
public String namaDepan = "Ujang";
public int umur = 24;
public abstract void belajar(); // method abstract
}
// Subclass (diwariskan dari Main)
class Murid extends Main {
public int tahunLulus = 2019;
public void belajar() { // Bentuk dari method abstract tersedia disini
System.out.println("Belajar sepanjang waktu");
}
}
// Akhir dari kode nama file : Main.java
// Kode dari nama file : Second.java
class Second {
public static void main(String[] args) {
// membuat sebuah object class Murid (yang mewarisi atribut dan method dari class Main)
Murid objectSaya = new Murid();
System.out.println("Nama: " + objectSaya.namaDepan);
System.out.println("Umur: " + objectSaya.umur);
System.out.println("Tahun lulus: " + objectSaya.tahunLulus);
objectSaya.belajar(); // memanggil method abstract
}
}
Output :
Nama: Ujang
Umur: 24
Tahun lulus: 2019
Belajar sepanjang waktu
Tutorial sebelumnya : Konstruktor Pada Java
Tutorial setelahnya : Encapsulation Pada Java
Semua Tutorial JAVA : Tutorial JAVA