Access Modifiers

ในบทนี้ เราจะพูดเกี่ยวกับ Access Modifiers ในภาษา Java

Access Modifiers เป็นคำสั่งในการควบคุมระดับการเข้าถึงของตัวแปรหรือเมธอดที่อยู่ภายในคลาส เหมือนที่คุณได้เห็นในการสร้างคลาสหลัก ชื่อของคลาสและไฟล์ต้องตรงกัน และต้องกำหนดการเข้าถึงให้เป็นแบบ public ซึ่งทำให้คลาสนี้สามารถเข้าถึงได้จากที่ทุกของโปรแกรม

ต่อมาเราจะมาพูดถึงระดับสมาชิก (member level) ซึ่งมันจะมาพร้อมกับการกระกาศตัวแปรที่คุณเคยเห็นในตัวอย่างก่อนหน้าแล้ว เช่น

private int width;
private int height;

public int calArea () {
return width * height;
}

ในภาษา Java นั้นมีคำสั่งในการควบคุมระดับการเข้าถึงอยุ่ 4 ระดับด้วยกัน คือ public, protected, private และ no modifier (ไม่ต้องกำหนด) โดยแต่ละรูปแบบนั้นมีความหมายดังนี้

  • public: คลาสหรือสมาชิกสามารถเข้าถึงได้จากที่ส่วนของโปรแกรม
  • protected: คลาสหรือสมาชิกสามารถเข้าถึงได้ภายใน package เดียวกันและ sub class ของมัน
  • no modifier (ไม่กำหนด): คลาสหรือสมาชิกสามารถเข้าถึงได้ภายใน package เดียวกัน และภายในคลาสเดียวกันเท่านั้น
  • private: คลาสหรือสมาชิกสามารถเข้าถึงได้ภายในคลาสเดียวกันเท่านั้น

จากคำอธิบายข้างบน เราสามารถนำมาเขียนเป็นตารางการเข้าถึงของคำสั่งทั้งหมดได้ดังนี้ โดยที่ public เป็นการเข้าถึงที่เป็นสาธารณะมากที่สุด และ private นั้นปิดกั้นที่สุด

ModifiersClassPackageSub classWorld
publicYesYesYesYes
protectedYesYesYesNo
no modifierYesYesNoNo
privateYesNoNoNo

ต่อไปมาดูตัวอย่างการใช้งาน Access Modifier กับการเขียนโปรแกรมในภาษา Java

public class TestFruit {
public static void main (String[] args) {
Fruit fr = new Fruit();
fr.name = "Grape";
fr.flavor = "sour";
fr.setColor("green");

System.out.println("Fruit name: " + fr.name);
System.out.println("Flavor: " + fr.flavor);
System.out.println("Color: " + fr.getColor());
}
}

class Fruit {
public String name;
String flavor;
private String color;

public String getColor () {
return color;
}
public void setColor (String c) {
color = c;
}
}

ในตัวอย่าง เป็นการใช้ access modifier แบบต่างๆ ในตอนแรก เราได้สร้างคลาส Fruit ที่มีสมาชิกทั้งตัวแปรและเมธอดที่มีระดับการเข้าถึงในแบบต่างๆ

Fruit fr = new Fruit();
fr.name = "Grape";
fr.flavor = "sour";
fr.setColor("green");

ต่อมาเราสร้างออบเจ็ค Fruit ที่มีชื่อว่า fr โดยคุณสังเกตุว่าออบเจ็คที่เราสร้างนั้นอยู่ในคลาส TestFruit นั่นหมายความว่าเราไม่สามารถเข้าถึงตัวแปร color ได้ เพราะมันมี access modifier แบบ private ซึ่งสามารถเข้าถึงได้ภายในคลาสเท่านั้น เราจึงเข้าถึงมันผ่าน public เมธอด getColor () และ setColor () ซึ่งอยู่ภายในคลาสเดียวกัน

สำหรับตัวแปร name และ flavor เราสามารถเข้าถึงได้ผ่านตัวแปรออบเจ็คโดยตรง เพราะพวกเขามี access modifier เป็นแบบ public ซึ่งสามารถเข้าถึงจากภายนอกได้

Fruit name: Grape
Flavor: sour
Color: green

และนี่เป็นผลลัพธ์ของโปรแกรม

ในบทนี้ คุณได้เรียนรู้กับ access modifier แบบต่างๆ ในภาษา Java ซึ่งจะมีการกำหนดการเข้าถึงตัวแปรในระดับที่ต่างกัน โดยเนื้อหาในบทนี้นั้นสำคัญกับแนวคิดในการทำ Encapsulation (การห่อหุ้มข้อมูล)


บทความเกี่ยวกับ Access Modifiers