Class Member dan Modifier Untuk Class Member

1. CLASS MEMBERS

  • Deklarasi yang dapat diberikan dalam badan suatu kelas adalah sbb [3]:

1.      Deklarasi static initializer block

2.      Deklarasi instance initializer block

3.      Deklarasi constructor

4.      Deklarasi member class

  • Yang termasuk member class adalah beberapa hal berikut ini [1&3]:

1.      Field (static dan non-static)

2.      Method (static dan non-static)

3.      Inner class (regular innerclass dan static innerclass)

4.      Inner interfaces

5.      Inner enum

  • Member class dari suatu kelas dapat diperoleh dengan beberapa cara [3] :

1.      Member diinherit dari superclass.

2.      Member diinherit dari super interfaces

3.      Member dideklarasikan di badan kelas tersebut.

  • Beberapa hal yang dideklarasikan dalam badan suatu kelas akan tetapi tidak diinherit ke subclass [3] :

1.      static initializer block.

2.      Instance initializer block.

3.      Constructor.

4.      private member class (private method dan private field).

2. MODIFIER UNTUK CLASS MEMBERS

  • Modifier suatu class-member dibagi menjadi 2, yaitu :

1.      Access modifier

2.      Non-access modifier

2.1. Access Modifier

  • Class member dapat memiliki 4 buah access control, yaitu [1]:

1.      public

2.      protected

3.      default

4.      private

 

Tiga diantara access control tersebut adalah access modifier, yaitu [1]:

1.      public

2.      protected

3.      private

  • Default access control adalah access control yang didapat bila kita tidak mencantumkan access modifier apapun pada class member [1&2].
  • Agar suatu class member dapat diakses oleh class lain, maka ada 2 syarat yang harus dipenuhi, yaitu :

1.      Class tempat member yang akan diakses harus tampak oleh class pengakses.

2.      Member yang akan diakses harus tampak oleh class pengakses.

  • Untuk mengakses member suatu class dapat dengan salah satu dari 6 cara berikut ini [1] :

1.      Untuk member yang dideclare dengan menggunakan keyword this.

2.      Untuk member yang dideclare dengan menggunakan variable reference.

3.      Untuk member yang diinherit dengan menggunakan keyword this.

4.      Untuk member yang diinherit dengan menggunakan keyword super.

5.      Untuk member yang diinherit dengan menggunakan variable reference.

6.      Untuk member kelas lain dengan menggunakan variable reference.

Note :

1.      Cara 1 dan 2 dipergunakan untuk mengakses member dari kelas itu sendiri.

2.      Cara 3,4 dan 5 dipergunakan untuk mengakses member dari superclass.

3.      Cara 6 dipergunakan untuk mengakses member dari kelas lain.

  • Berikut ini adalah rangkuman access control member (method dan field) [1&2] :

VISIBILITY

public

protected

default

private

Contoh

Dari class yang sama
  Dengan keyword this Ö Ö Ö Ö Contoh 1
  Dengan variable reference Ö Ö Ö Ö Contoh 2
Dari subclass pada package yang sama
  Dengan keyword this Ö Ö Ö ´ Contoh 3
  Dengan keyword super Ö Ö Ö ´ Contoh 4
  Dengan variable reference Ö Ö Ö ´ Contoh 5
Dari non-subclass pada package yang sama
  Dengan variable reference Ö Ö Ö ´ Contoh 6
Dari subclass pada package yang berbeda
  Dengan keyword this Ö Ö ´ ´ Contoh 7
  Dengan keyword super Ö Ö ´ ´ Contoh 8
  Dengan variable reference Ö ´ ´ ´ Contoh 9
Dari non-subclass pada package yang berbeda
  Dengan variable reference Ö ´ ´ ´ Contoh 10

 

Program 1
 

package paket.a;

 

public class Contoh1 {

public static void main(String[] args) {

A a = new A();

a.printString();

}

}

 

class A {

public String s1 = “public”;

protected String s2 = “protected”;

String s3 = “default”;

private String s4 = “private”;

void printString() {

System.out.println(this.s1);

System.out.println(this.s2);

System.out.println(this.s3);

System.out.println(this.s4);

}

}

 

Program di atas akan menghasilkan :

public

protected

default

private

 

Program 2
 

package paket.a;

 

public class Contoh2 {

public static void main(String[] args) {

A a1 = new A();

A a2 = new A();

a1.printString(a2);

}

}

 

class A {

public String s1 = “public”;

protected String s2 = “protected”;

String s3 = “default”;

private String s4 = “private”;

void printString(A a) {

System.out.println(a.s1);

System.out.println(a.s2);

System.out.println(a.s3);

System.out.println(a.s4);

}

}

 

Program di atas akan menghasilkan :

public

protected

default

private

 

Program 3
 

package paket.a;

 

public class Contoh3 {

public static void main(String[] args) {

B b = new B();

b.printString();

}

}

 

class A {

public String s1 = “public”;

protected String s2 = “protected”;

String s3 = “default”;

private String s4 = “private”;

}

 

class B extends A {

void printString() {

System.out.println(this.s1);

System.out.println(this.s2);

System.out.println(this.s3);

System.out.println(this.s4);

}

}

 

Program di atas akan menghasilkan compile time error sbb:

E:\Data\Data NetBeans\scjp\src\paket\a\Contoh3.java:22: s4 has private access in paket.a.A

System.out.println(this.s4);

1 error

 

Program 4
 

package paket.a;

 

public class Contoh4 {

public static void main(String[] args) {

B b = new B();

b.printString();

}

}

 

class A {

public String s1 = “public”;

protected String s2 = “protected”;

String s3 = “default”;

private String s4 = “private”;

}

 

class B extends A {

void printString() {

System.out.println(super.s1);

System.out.println(super.s2);

System.out.println(super.s3);

System.out.println(super.s4);

}

}

 

Program di atas akan menghasilkan compile time error sbb:

E:\Data\Data NetBeans\scjp\src\paket\a\Contoh4.java:22: s4 has private access in paket.a.A

System.out.println(super.s4);

1 error

 

Program 5
 

package paket.a;

 

public class Contoh5 {

public static void main(String[] args) {

B b1 = new B();

B b2 = new B();

b1.printString(b2);

}

}

 

class A {

public String s1 = “public”;

protected String s2 = “protected”;

String s3 = “default”;

private String s4 = “private”;

}

 

class B extends A {

void printString(B b) {

System.out.println(b.s1);

System.out.println(b.s2);

System.out.println(b.s3);

System.out.println(b.s4);

}

}

 

Program di atas akan menghasilkan compile time error sbb:

E:\Data\Data NetBeans\scjp\src\paket\a\Contoh5.java:23: s4 has private access in paket.a.A

System.out.println(b.s4);

1 error

 

Program 6
 

package paket.a;

 

public class Contoh6 {

public static void main(String[] args) {

A a = new A();

B b = new B();

b.printString(a);

}

}

 

class A {

public String s1 = “public”;

protected String s2 = “protected”;

String s3 = “default”;

private String s4 = “private”;

}

 

class B {

void printString(A a) {

System.out.println(a.s1);

System.out.println(a.s2);

System.out.println(a.s3);

System.out.println(a.s4);

}

}

 

Program di atas akan menghasilkan compile time error sbb:

E:\Data\Data NetBeans\scjp\src\paket\a\Contoh6.java:24: s4 has private access in paket.a.A

System.out.println(a.s4);

1 error

 

Program 7
 

package paket.a;

 

public class A {

public String s1 = “public”;

protected String s2 = “protected”;

String s3 = “default”;

private String s4 = “private”;

}

 

 

package paket.b;

 

import paket.a.A;

 

public class Contoh7 {

public static void main(String[] args) {

B b = new B();

b.printString();

}

}

 

class B extends A {

void printString() {

System.out.println(this.s1);

System.out.println(this.s2);

System.out.println(this.s3);

System.out.println(this.s4);

}

}

 

Program di atas akan menghasilkan compile time error sbb :

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh7.java:16: s3 is not public in paket.a.A; cannot be accessed from outside package

System.out.println(this.s3);

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh7.java:17: s4 has private access in paket.a.A

System.out.println(this.s4);

2 errors

 

Program 8
 

package paket.a;

 

public class A {

public String s1 = “public”;

protected String s2 = “protected”;

String s3 = “default”;

private String s4 = “private”;

}

 

 

package paket.b;

 

import paket.a.A;

 

public class Contoh8 {

public static void main(String[] args) {

B b = new B();

b.printString();

}

}

 

class B extends A {

void printString() {

System.out.println(super.s1);

System.out.println(super.s2);

System.out.println(super.s3);

System.out.println(super.s4);

}

}

 

Program di atas akan menghasilkan compile time error sbb :

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh8.java:16: s3 is not public in paket.a.A; cannot be accessed from outside package

System.out.println(super.s3);

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh8.java:17: s4 has private access in paket.a.A

System.out.println(super.s4);

2 errors

 

Program 9
 

package paket.b;

 

import paket.a.A;

 

public class Contoh9 {

public static void main(String[] args) {

A a = new A();

B b = new B();

b.printString(a);

}

}

 

class B extends A {

void printString(A a) {

System.out.println(a.s1);

System.out.println(a.s2);

System.out.println(a.s3);

System.out.println(a.s4);

}

}

 

Program di atas akan menghasilkan compile time error sbb:

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh9.java:16: s2 has protected access in paket.a.A

System.out.println(a.s2);

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh9.java:17: s3 is not public in paket.a.A; cannot be accessed from outside package

System.out.println(a.s3);

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh9.java:18: s4 has private access in paket.a.A

System.out.println(a.s4);

3 errors

 

Program 10
 

package paket.b;

 

import paket.a.A;

 

public class Contoh10 {

public static void main(String[] args) {

A a = new A();

B b = new B();

b.printString(a);

}

}

 

class B extends A {

void printString(A a) {

System.out.println(a.s1);

System.out.println(a.s2);

System.out.println(a.s3);

System.out.println(a.s4);

}

}

 

Program di atas akan menghasilkan compile time error sbb:

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh10.java:16: s2 has protected access in paket.a.A

System.out.println(a.s2);

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh10.java:17: s3 is not public in paket.a.A; cannot be accessed from outside package

System.out.println(a.s3);

E:\Data\Data NetBeans\scjp\src\paket\b\Contoh10.java:18: s4 has private access in paket.a.A

System.out.println(a.s4);

3 errors

 

 

  • Selain karena access control dari member class, prasyarat lain agar suatu class-member dapat diaccess adalah class tempat class-member yang akan diakses harus tampak dari class yang mengakses. Bila prasyarat ini tidak terpenuhi, maka member-class tetap tidak dapat diakses (hal ini biasanya terjadi karena class yang diakses dan class yang mengakses berbeda packagenya) [1&2].

Bila package berbeda, maka class yang diakses harus bermodifier public [1].

Bila kedua class berasal dari package yang berbeda, maka dapat menggunakan statement import ataupun qualified class name [1].

Contoh [1] :

Program 01 (contoh qualified class name)
 

package packageSatu;

 

public class A

{

public static void doA()

{

System.out.println(“A.doA()”);

}

}

 

 

package packageDua;

 

public class B

{

public static void main(String[] args)

{

packageSatu.A.doA(); //qualified class name

}

}

 

Program di atas akan menghasilkan :

A.doA()

 

2.1.1 Detil modifier private

  • Bila suatu class-member dideklarasikan private, maka subclass tidak dapat menginherit class-member tersebut [2].

Contoh [1] :

Program 02
 

package classMembers;

 

public class Private1

{

public static void main(String[] args)

{

B b = new B();

b.doB();

}

}

 

class A

{

private void myPrivateMethod()

{

System.out.println(“A.myPrivateMethod()”);

}

}

 

class B extends A

{

void doB()

{

myPrivateMethod();

}

}

 

Programg di atas akan menghasilkan compile time error sbb :

Exception in thread “main” java.lang.Error: Unresolved compilation problem:

The method myPrivateMethod() from the type A is not visible

 

at classMembers.B.doB(Private1.java:24)

at classMembers.Private1.main(Private1.java:8)

 

  • Bila pada superclass terdapat class-member dengan modifier private, maka pada subclass kita dapat mendeklarasikan class-member dengan signature yang sama dengan class-member pada superclass dengan modifier private tadi [1&2].

Bila class-member tersebut adalah method, maka kita tidak melakukan overriding, sebab method private tidak diinherit (sehingga otomatis tidak dapat dioverriding) [1&2].

Contoh [1]

Program 03
 

package classMembers;

 

public class Private2

{

public static void main(String[] args)

{

Y y = new Y();

y.doSesuatu();

}

}

 

class X

{

private void doSesuatu()

{

System.out.println(“X.doSesuatu()”);

}

}

 

class Y extends X

{

void doSesuatu()

{

System.out.println(“Y.doSesuatu()”);

}

}

 

Program di atas akan menghasilkan :

Y.doSesuatu()

 

2.1.2 Detil modifier protected

  • Subclass (yang berbeda package dengan superclass) dapat mengakses protected class-member dari superclass hanya melalui inheritance(this dan super), tidak dapat melalui reference [1&2].

Contoh [1] :

Program 04
 

package classMembers.packageSatu;

 

public class X

{

protected void doSesuatu()

{

System.out.println(“X.doSesuatu”);

}

}

 

 

package classMembers.packageDua;

 

import classMembers.packageSatu.X;

 

public class Y extends X

{

public static void main(String[] args)

{

Y y = new Y();

y.doSesuatu(); //OK (melalui inheritance dari Y)

X x = new X();

x.doSesuatu(); //ERROR (melalui reference)

}

}

 

Program di atas akan menghasilkan compile time error sbb :

Exception in thread “main” java.lang.Error: Unresolved compilation problem:

The method doSesuatu() from the type X is not visible

 

at classMembers.packageDua.Y.main(Y.java:13)

 

  • Bila ada class-member pada superclass bermodifier protected, dan subclass berada pada package lain, maka class-member bermodifier protected tadi tidak dapat diakses oleh class lain pada package yang sama dari subclass (seakan-akan class-member tersebut bermodifier private dan hanya dapat diakses dari subclass dan sub-subclassnya) [1&2]

Contoh [1] :

Program 05
 

package classMembers.packageSatu;

 

public class G

{

protected void doSesuatu()

{

System.out.println(“G.doSesuatu()”);

}

}

 

 

package classMembers.packageDua;

 

public class H extends classMembers.packageSatu.G

{

 

}

 

 

package classMembers.packageDua;

 

public class I

{

public static void main(String[] args)

{

I i = new I();

i.doSesuatu(); //ERROR

}

}

 

Program di atas akan menghasilkan compile time error sbb :

Exception in thread “main” java.lang.Error: Unresolved compilation problem:

The method doSesuatu() is undefined for the type I

 

at classMembers.packageDua.I.main(I.java:8)

 

2.2. Non-Access Modifier

  • Yang termasuk non-access modifier adalah keyword-keyword berikut [1] :

1.      abstract

2.      final

3.      native

4.      static

5.      strictfp

6.      synchronized

7.      transient

8.      volatile

  • Tidak semua member class dapat menggunakan non-access modifier diatas, berikut ini adalah table yang menunjukkan apakah class member tertentu dapat menggunakan non-access modifier tertentu [1]:

NO

Modifier

Class Member

Field

Method

  Inner class
1 abstract

´

Ö

Ö

2 final

Ö

Ö

Ö

3 native

´

Ö

´

4 static

Ö

Ö

Ö

5 strictfp

´

Ö

Ö

6 synchronized

´

Ö

´

7 transient

Ö

´

´

8 volatile

Ö

´

´

Note : field yang diterangkan di table di atas adalah variable yang merupakan class member (static atau non-static variable). Inner class yang diterangkan di table di atas adalah regular inner class dan static inner class [1].

2.2.1 Modifier abstract

  • Modifier ini hanya dapat diterapkan untuk method dan inner class (field tidak dapat dikenai modifier ini) [1].
  • abstract method adalah method yang dideklarasikan, akan tetapi tidak diimplementasikan [2]. abstract method tidak memiliki badan method, akan tetapi setelah deklarasi nama method langsung diberi tanda titik koma (semicolon) [1&2].

Contoh [1] :

Program xx
 

abstract class A {

abstract void myAbstractMethod(String s);

}

 

 

  • Modifier abstract hanya dapat diberikan pada method-method yang terletak pada class abstract (class yang diberi modifier abstract) [1&2].
  • Suatu method yang dideklarasikan abstract tidak dapat memiliki modifier static [2].

Contoh [1] :

Program xx
 

abstract class A {

abstract static void myMethod();

}

 

Program di atas akan menghasilkan compile time error sbb :

E:\Data\Data NetBeans\scjp\src\CobaInner.java:23: illegal combination of modifiers: abstract and static

abstract static void myMethod();

1 error

2.2.2 Modifier final

  • Modifier ini dapat diterapkan pada field, method dan inner class [1].
  • Bila diberikan pada method, maka subclass tidak akan dapat mengoverride method final pada superclass [1&2].

Contoh [1] :

Program xx
 

class A {

final void myMethod() {}

}

 

class B extends A {

void myMethod() {}

}

 

Program di atas akan menghasilkan compile time error sbb :

E:\Data\Data NetBeans\scjp\src\Coba.java:33: myMethod() in B cannot override myMethod() in A; overridden method is final

void myMethod() {

1 error

 

  • final variable dibahas pada bab : Tipe Data Primitive, Literals, dan Variable J[1]

 

2.2.3 Modifier native

  • Modifier ini hanya dapat diberikan pada method saja (field dan inner class tidak dapat diberi modifier ini) [1].
  • Method dengan modifier ini menyatakan bahwa implementasi method dalam kode program selain java (biasanya dalam bahasa C) [2].
  • Penulisan native method sama dengan abstract method, yaitu tanpa body, langsung titik koma (semicolon) [2].

Contoh [1] :

Program xx
 

 

class B {

native void myNativeMethod(String s);

}

 

 

2.2.4 Modifier static

  • Diterangkan pada bab static J [1].
  • Modifier ini hanya dapat diterapkan untuk method dan inner class (field tidak dapat dikenai modifier ini) [1].
  • Dengan memberi modifier strictfp pada kelas, maka setiap kode pada kelas tersebut akan memnuhi standar IEEE 754 tentang aturan floating-point. [2]
  • Bila kelas tidak diberi modifier strictfp, kita masih dapat memberi modifier strictfp untuk method agar hanya method tersebut yang memnuhi standar IEEE 754. [2]

2.2.5 Modifier strictfp

 

2.2.6 Modifier synchronized

  • Modifier synchronized ini hanya dapat diberikan pada method (field dan inner class tidak dapat dikenai modifier ini) [2].
  • Method dengan modifier ini akan menyebabkan method tersebut hanya dapat diakses oleh 1 thread dalam 1 waktu [2].
  • Method dengan modifier ini dapat diber sembarang access modifier [2].
  • Diterangkan lebih lengkap pada bab thread J [1].
  • Modifier ini hanya dapat diberikan untuk field saja [1].
  • Serializing adalah menyimpan suatu object ke dalam suatu I/O stream [1&2].
  • Bila suatu field diberi modifier ini, maka field ini tidak akan diserialize ketika kita mengserialize suatu object dari kelas tempat field dideklarasikan [1&2].
  • Untuk exam SCJP 1.5, yang perlu diketahui tentang modifier volatile ini hanyalah bahwa modifier ini hanya dapat diberikan untuk field [1&2].

5 responses to “Class Member dan Modifier Untuk Class Member

  1. Good Job mbk broo..
    saya tunggu postingan slanjutnya ya

  2. wah. coba lbih di simple kn mbk.. misa ada download’annya. shngga bgi tmn2 yg ingin share ato copas bisa lebih mudah mbk

  3. Waw.. masuk akal ni blog.. mhon bmbingan blog y mbk

  4. di tunggu posting2’an slanjutnya y cntik ^_^

  5. aku suka aku suka

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s