คลาสและออปเจค (class and object)
DESCRIPTION
บทที่ 3. คลาสและออปเจค (Class and Object). 5. 2. 3. 4. 1. 6. โอเวอร์โหลดเมธอด (Overload method). ออปเจค (Object). เมธอด (Method). คอนสตรักเตอร์เมธอด (Constructor method). คลาส (Class). แพ็คเกจ (Package). คลาสและออปเจค (Class and Object). คลาส (Class). - PowerPoint PPT PresentationTRANSCRIPT
คลาสและออปเจค(Class and Object)
บทท�� 3
คลาสและออปเจค(Class and Object)
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล
โอเวอริ�โหลดเมธอด (Overload method)5
ออปเจค (Object)2
เมธอด (Method)3
คอนสตริ�กุเตอริ�เมธอด (Constructor method)
4
2
คลาส (Class)1
แพิ!คเกุจ (Package)6
คลาส (Class)
ในการสร�างคลาสน��นมี�ส�วนท��ส�าค�ญ ดั�งน�� ฟิ�ลดั� (Field) ค อ ตั�วแปรท��ใช้�เก#บข้�อมี%ลข้องออปเจค
บางคร��งเร�ยกฟิ�ลดั�ว�า ดัาตั�าเมีมีเบอร� (Data member) หร อ วาร(เอเบอร� (Variable)
เมีธอดั (Method) ค อ การกระท�า (Operation) ท��เราตั�องการให�ออปเจคสามีารถท�าไดั�
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล3
คลาส (Class)
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล4
class Student {String stuId;String name;String surName;char grade;static int count = 0;
Data member
class name
ConstructorMethod
Instance variable
Class variable
Parameter list
Student(String id, String Name, …
…}public int
getCount() {return
count;}//method ต�วอ"#น ๆ ที่&#
เหล"ออยู่()……
}
ออปเจค (Object)
ออปเจคท��เก(ดัมีาจากคลาสเร�ยกว�า อ(นสแตันดั�(Instance) โดัยมี�ส�วนประกอบท��ส บทอดัมีาจากคลาส
ค อ ตั�วแปรตั�าง ๆ ในคลาส ซึ่/�งตั�วแปรย�งแบ�งไดั�เป0น คลาส วาร(เอเบอร� (Class variable) ก�บ อ(นสแตันดั�วาร(เอ
เบอร� (Instance variable) เมี �อเราสร�างออปเจคข้/�นมีาจากคลาส ออปเจคจะมี�การค�ดั
ลอกตั�วแปรไว�ในพื้ �นท��หน�วยความีจ�าข้องมี�นเอง อย�างน�� เร�ยกว�า อ(นสแตันดั�วาร(เอเบอร� ส�วนตั�วแปรท��ออปเจคท2ก
ตั�วตั�องใช้�พื้ �นท��ในหน�วยความีจ�าร�วมีก�นไมี�มี�การค�ดัลอกมีา เก#บไว�ในพื้ �นท��ข้องตั�วเองเร�ยกว�า คลาสวาร(เอเบอร�
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล5
ออปเจค (Object)
ในส�วนข้องการเร�ยกใช้�งานตั�วแปรแบบคลาสวาร(เอเบอร� ย�งไมี�จ�าเป0นตั�องสร�างออปเจคใดั ๆ ข้/�นมีาก�อนเร�ยกใช้�งาน
เราสามีารถเร�ยกใช้�งานคลาสวาร(เอเบอร�ผ่�านคลาสไดั�เลย การประกาศตั�วแปรใดั ๆ ให�เป0นคลาสวาร(เอเบอร�ตั�องใช้�ค�า
ส��ง static น�าหน�าตั�วแปรน��น ๆ เสมีอ แตั�การใช้�งานตั�วแปรช้น(ดัอ(นสแตันดั�วาร(เอเบอร�น��นตั�องสร�างออปเจค
ข้/�นมีาก�อนแล�วเร�ยกใช้�ตั�วแปรอ(นสแตันดั�วาร(เอเบอร�ผ่�านอ อปเจค
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล6
ออปเจค (Object)
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล7
class Student {
static int count = 0;
String stuId;
String name;
String surName;
char grade;
ที่�*งสมชายู่และสมปองม&กุาริค�ดลอกุต�วแปริเหล)าน&*ไปไว,ในพิ"*นที่&#หน)วยู่ความจ.าของต�ว
เอง
ออปเจคที่�กุต�วใช, ต�วแปริ count ริ)วม
กุ�น0Somchai
stuIdname
surNamegrade
SompongstuIdname
surNamegrade
ความแตกุต)างริะหว)างคลาสกุ�บออปเจค
คลาส ออปเจคเป1นต,นแบบที่&#ม&ที่�*งต�วแปริ
และเมธอดต,องส"บที่อดมาจากุคลาส
ไม)ม&ต�วตนขณะที่&#โปริแกุริมกุ.าล�งปริะมวลผล
ม&ต�วตนขณะโปริแกุริมกุ.าล�งปริะมวลผล
ไม)ม&กุาริเปล&#ยู่นแปลงขณะโปริแกุริมกุ.าล�งปริะมวลผล
สามาริถเปล&#ยู่นแปลงค)าของต�วแปริขณะโปริแกุริม
กุ.าล�งปริะมวลผล
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล8
เมธอด (Method)
เมีธอดัก#ถ%กแบ�งออกเป0นสองช้น(ดัเช้�นเดั�ยวก�บคลาส ค อ คลาสเมีธอดั (Class method) และ อ(นสแตันดั�เมีธอดั
(Instance method) คลาสเมีธอดั ค อ เมีธอดัท��สามีารถประมีวลผ่ลไดั�เอง โดัย
ไมี�จ�าเป0นตั�องสร�างออปเจคใดั ๆ ข้/�นมีาเร�ยกใช้�งานเลย( เหมี อนเมีธอดั main() ไมี�ตั�องสร�างออปเจคใดั ๆ มีา
เร�ยกใช้�เลย ) การประกาศคลาสเมีธอดัก#ท�าไดั�เช้�นเดั�ยวก�บ คลาสวาร(เอเบอร� ค อตั�องใช้�ค�าส��ง static น�าหน�าเสมีอ
อ(นสแตันดั�เมีธอดั ค อ เมีธอดัท��ตั�องสร�างออปเจคข้/�นมีา ก�อนถ/งจะเร�ยกใช้�เมีธอดัน��ไดั� การประกาศเมีธอดัก#ท�าไดั�
ปกตั(ท��วไปไมี�ตั�องใส�ค�าว�า static น�าหน�าผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล9
กุาริใช,งานต�วแปริและเมธอด
class Student { String stuId; String name; String surName; char grade; static int count=0;
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล10
กุาริใช,งานต�วแปริและเมธอด
Student(String id, String n, String sName, char g) {
stuId = id; name = n; surName = sName; grade = g; count++; }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล11
กุาริใช,งานต�วแปริและเมธอด
public int getCount() { return count; } public String getStuId() { return stuId; } public String getName() { return name; } public String getSurName() { return surName; }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล12
กุาริใช,งานต�วแปริและเมธอด
public char getGrade() { return grade; }public void display() { System.out.printf("%s %s %s",
getStuId(), getName(), getSurName()); System.out.printf(" [Grade: %s]
%n", getGrade()); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล13
กุาริใช,งานต�วแปริและเมธอด
จากตั�วอย�างไดั�มี�การสร�างคลาส Student มี�ตั�วแปร 5 ตั�ว ค อ stuId, name, surname, grade เป0นตั�วแปร
ช้น(ดัอ(นสแตันดั�วาร(เอเบอร� และ count เป0นตั�วแปรช้น(ดั คลาสวาร(เอเบอร� ตั�อมีาไดั�มี�การสร�างเมีธอดัอ�ก 7 เมีธอดั ซึ่/�งมี�หน�าท��ตั�างก�น แตั�มี�เมีธอดัท��มี�ช้ �อเดั�ยวก�นก�บคลาสค อ
เมีธอดั Student()
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล14
กุาริใช,งานต�วแปริและเมธอด
Student(String id, String n, String sName, char g) {
stuId = id; name = n; surName = sName; grade = g; count++; }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล15
กุาริใช,งานต�วแปริและเมธอด
เมีธอดัน��เป0นเมีธอดัพื้(เศษท��เร�ยกไดั�ว�าเป0นคอนสตัร�กเตัอร� เมีธอดั (Constructor method) ซึ่/�งมี�หน�าท��ก�าหนดัค�า
เร(�มีตั�นให�ก�บตั�วแปรข้องออปเจคท��ส บทอดัค2ณสมีบ�ตั(มีา จากคลาส
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล16
ว�ธ&กุาริสริ,างเมธอดและกุาริเริ&ยู่กุใช,งานเมธอด
เมีธอดัสามีารถแบ�งไดั� 2 แบบ ค อ เมีธอดัท��มี�การค นค�า กล�บ และเมีธอดัท��ไมี�มี�การค นค�ากล�บ โครงสร�างข้อง
เมีธอดัมี�ดั�งน��
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล17
ว�ธ&กุาริสริ,างเมธอดและกุาริเริ&ยู่กุใช,งานเมธอด
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล18
ชน�ดของค)าที่&#ค"นกุล�บ
ช"#อของเมธอด
พิาริาม�เตอริ� (ถ,าม&)
ค.าส�#งต)าง ๆ ที่&#อยู่()ในเมธอดน&*
returnType methodName( par1, par2, …, pars ) {
// body of method……
}
ใช,ค.าส�#ง void ถ,าไม)ม&กุาริค"นค)า
ว�ธ&กุาริสริ,างเมธอดและกุาริเริ&ยู่กุใช,งานเมธอด
ลองดั%ตั�วอย�างเมีธอดั getStuId() จากคลาส Student มี�ดั�งน��public String getStuId() {return stuId; } จะเห#นไดั�ว�า ช้น(ดัข้องค�าท��ค นกล�บ ค อ String ช้ �อข้องเมีธอดั ค อ getStuId พื้ารามี(เตัอร� ค อ ไมี�มี� ค�าส��งท��อย%�ในเมีธอดั ค อ return stuId;
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล19
ว�ธ&กุาริสริ,างเมธอดและกุาริเริ&ยู่กุใช,งานเมธอด
เมีธอดัอ�กช้น(ดัท��ไมี�มี�การค นค�ากล�บค อเมีธอดั display() ดั�งน��
public void display() { System.out.printf("%s %s %s",
getStuId(), getName(), getSurName()); System.out.printf(" [Grade: %s]
%n", getGrade()); }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล20
ว�ธ&กุาริสริ,างเมธอดและกุาริเริ&ยู่กุใช,งานเมธอด
จะเห#นไดั�ว�า ช้น(ดัข้องค�าท��ค นกล�บ ค อ ไมี�มี� ( ใช้�ค�าส��งvoid)
ช้ �อข้องเมีธอดั ค อ display พื้ารามี(เตัอร� ค อ ไมี�มี� ค�าส��งท��อย%�ในเมีธอดั ค อ
System.out.printf("%s %s %s", getStuId(), getName(), getSurName());
System.out.printf(" [Grade: %s]%n", getGrade());
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล21
ความแตกุต)างริะหว)างเมธอดที่&#ค"นค)ากุล�บและเมธอดที่&#ไม)ค"นค)ากุล�บ
เมธอดที่&#ค"นค)ากุล�บ เมธอดที่&#ไม)ค"นค)ากุล�บต,องใช,ค.าส�#ง return ตามด,วยู่ค)าที่&#ต,องค"นกุล�บ
ไม)จ.าเป1นต,องใช,ค.าส�#ง return แต)ถ,าใช,ต,องตามด,วยู่ ; ด,วยู่เสมอ
ต,องข4*นต,นเมธอดด,วยู่ชน�ดของข,อม(ลที่&#ต,องค"นค)ากุล�บ
ต,องข4*นต,นเมธอดด,วยู่ค.าส�#ง void เสมอ
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล22
กุาริปริะมวลผลของเมธอดที่&#ม&กุาริใช,พิาริาม�เตอริ�
class Class1 { public static void main(String[] args) { double a = 3.2; double b = findDouble(a); System.out.printf("Double of %.1f is
%.1f%n ",a,b); } public static double findDouble(double a) { return 2*a; } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล23
กุาริปริะมวลผลของเมธอดที่&#ม&กุาริใช,พิาริาม�เตอริ�
ผ่ลล�พื้ธ�ท��ไดั�ค อDouble of 3.2 is 6.4
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล24
กุาริปริะมวลผลของเมธอดที่&#ม&กุาริใช,พิาริาม�เตอริ�
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล25
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
การค นค�าผ่�านตั�วแปรในพื้ารามี(เตัอร�สามีารถท�าไดั� 2 แบบ ค อ
ส�งผ่�านเฉพื้าะค�า (Pass by value) ส�งผ่�านโดัยการอ�างอ(ง (Pass by reference)
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล26
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
class Class2 { public static void main(String[] args) { int num = 60; int add = addValue(num); System.out.printf("Before: number is %d%n",num); System.out.printf("Now: number from addValue() is
%d%n",add); System.out.printf("After: number is %d%n",num); } public static int addValue(int number) { number *=2; return number; } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล27
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
ผ่ลล�พื้ธ�ท��ไดั�ค อBefore: number is 60Now: number from addValue() is 120After: number is 60
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล28
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล29
กุาริส)งผ)านโดยู่กุาริอ,างอ�ง (Pass by reference)
class Num { int a=1; public static void addValue(Num num) { num.a++; } } class Class3 { public static void main (String[] args) { Num obj = new Num(); System.out.printf("Before: obj.a is %d%n",obj.a); obj.addValue(obj); System.out.printf("Now : obj.a from addValue() is %d%n",obj.a); System.out.printf("After : obj.a is %d%n",obj.a); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล30
กุาริส)งผ)านโดยู่กุาริอ,างอ�ง (Pass by reference)
ผ่ลล�พื้ธ�ท��ไดั�ค อBefore: obj.a is 1Now : obj.a from addValue() is 2After : obj.a is 2
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล31
กุาริส)งผ)านโดยู่กุาริอ,างอ�ง (Pass by reference)
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล32
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
ห�วข้�อตั�อไปเราจะมีาสร�างโปรแกรมีท��ท�าการเร�ยกใช้�เมีธอดั ตั�าง ๆ ข้องคลาส Student ก�น
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล33
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
class Student { String stuId; String name; String surName; char grade; static int count=0; Student(String id, String n, String sName, char g) { stuId = id; name = n; surName = sName; grade = g; count++; }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล34
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
public int getCount() { return count; } public String getStuId() { return stuId; } public String getName() { return name; } public String getSurName() { return surName; }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล35
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
public char getGrade() { return grade; } public void display() { System.out.printf("%s %s %s",
getStuId(), getName(), getSurName()); System.out.printf(" [Grade: %s]%n",
getGrade()); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล36
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
class mainStudent { public static void main(String[] args) { Student somchai = new
Student("5201023001", "Somchai", "Jaa", 'A'); Student sompong = new
Student("5201023002", "Sompong", "Kab", 'B'); somchai.display(); sompong.display(); System.out.printf("Amount of objects created:
%d%n",somchai.getCount()); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล37
กุาริค"นค)าผ)านต�วแปริในพิาริาม�เตอริ�
ผ่ลล�พื้ธ�ท��ไดั�ค อ5201023001 Somchai Jaa
[Grade: A]5201023002 Sompong Kab
[Grade: B]Amount of objects created: 2
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล38
กุาริกุ.าหนดค�ณสมบ�ต�กุาริใช,งานต�วแปริและเมธอด(Accessibility)
ไม)ใส)ค.าใด ๆ เลยู่ หมีายถ/ง ถ�าอย%�ในแพื้#คเกจ (package) เดั�ยวก�น จะเป0นคลาสตั�วเอง คลาสล%ก หร อคลาสอ �น ๆ ก#สามีารถใช้�ตั�วแปร
หร อเมีธอดัน��ไดั� ( คล�ายก�บ public) แตั�ถ�าอย%�คนละแพื้#กเกจ ไมี�ให�ใช้� public หมีายถ/ง อน2ญาตัให�ใช้�ตั�วแปรหร อเมีธอดัน��จากท��งคลาส
ตั�วเอง คลาสล%ก (Subclass) หร อแมี�กระท��งคลาสอ �น ๆ ก#สามีารถ ใช้�งานตั�วแปรหร อเมีธอดัน��ไดั� ถ/งแมี�จะอย%�คนละแพื้#คเกจ
protected หมีายถ/ง อน2ญาตัให�ใช้�ตั�วแปรหร อเมีธอดัน��เฉพื้าะ คลาสตั�วเอง และคลาสล%กและ คลาสอ �น ๆ ท��อย%�ในแพื้#คเกจเดั�ยวก�น
ไมี�อน2ญาตัให�ใช้�ส�าหร�บแพื้#คเกจตั�างก�น private หมีายถ/ง อน2ญาตัให�ใช้�ตั�วแปรหร อเมีธอดัน��เฉพื้าะคลาส
ตั�วเองเท�าน��น คลาสอ �น ๆ ไมี�ว�าจะเป0นคลาสล%ก หร อคลาสอ �น ๆ ก#ไมี�ให�ใช้�
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล39
กุริณ&อยู่()ในแพิ!คเกุจเด&ยู่วกุ�น
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล40
กุริณ&อยู่()ต)างแพิ!คเกุจกุ�น
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล41
ต�วอยู่)างปริะกุอบกุาริใช,งานเริ�#มจากุ ไม)ใส)ค.าใด ๆ เลยู่
class ClassA { int one=1; public int two=2; protected int three=3; private int four=4;}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล42
ต�วอยู่)างปริะกุอบกุาริใช,งานเริ�#มจากุ ไม)ใส)ค.าใด ๆ เลยู่
class SubClassA extends ClassA { ClassA a = new ClassA(); public void display() { System.out.printf("%d%n",a.one); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล43
ต�วอยู่)างปริะกุอบกุาริใช,งานเริ�#มจากุ ไม)ใส)ค.าใด ๆ เลยู่
class mainClassA { public static void main (String[] args)
{ ClassA obj = new ClassA(); System.out.printf("%d%n",obj.one); SubClassA obj2 = new SubClassA(); obj2.display(); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล44
ต�วอยู่)างปริะกุอบกุาริใช,งานเริ�#มจากุ ไม)ใส)ค.าใด ๆ เลยู่
ผ่ลล�พื้ธ�ค อ11
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล45
ต�วอยู่)างต)อไปใส)ค.าว)า public ด�งน&*
class ClassB { int one=1; public int two=2; protected int three=3; private int four=4;}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล46
ต�วอยู่)างต)อไปใส)ค.าว)า public ด�งน&*
class SubClassB extends ClassB { ClassB b = new ClassB(); public void display() { System.out.printf("%d%n",b.two); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล47
ต�วอยู่)างต)อไปใส)ค.าว)า public ด�งน&*
class mainClassB { public static void main (String[] args)
{ ClassB obj = new ClassB(); System.out.printf("%d%n",obj.two); SubClassB obj2 = new SubClassB(); obj2.display(); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล48
ต�วอยู่)างต)อไปใส)ค.าว)า public ด�งน&*
ผ่ลล�พื้ธ�ค อ22
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล49
ต�วอยู่)างต)อไปใส)ค.าว)า protected ด�งน&*
class ClassC { int one=1; public int two=2; protected int three=3; private int four=4;}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล50
ต�วอยู่)างต)อไปใส)ค.าว)า protected ด�งน&*
class SubClassC extends ClassC { ClassC c = new ClassC(); public void display() { System.out.printf("%d%n",c.three); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล51
ต�วอยู่)างต)อไปใส)ค.าว)า protected ด�งน&*
class mainClassC { public static void main (String[] args)
{ ClassC obj = new ClassC(); System.out.printf("%d%n",obj.three); SubClassC obj2 = new SubClassC(); obj2.display(); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล52
ต�วอยู่)างต)อไปใส)ค.าว)า protected ด�งน&*
ผ่ลล�พื้ธ�ค อ33
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล53
ต�วอยู่)างต)อไปใช,ค.าว)า private ด�งน&*
class ClassD { int one=1; public int two=2; protected int three=3; private int four=4;}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล54
ต�วอยู่)างต)อไปใช,ค.าว)า private ด�งน&*
class SubClassD extends ClassD { ClassD d = new ClassD(); public void display() { System.out.printf("%d%n",d.four); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล55
ต�วอยู่)างต)อไปใช,ค.าว)า private ด�งน&*
class mainClassD { public static void main (String[] args)
{ ClassD obj = new ClassD(); System.out.printf("%d%n",obj.four); SubClassD obj2 = new SubClassD(); obj2.display(); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล56
ต�วอยู่)างต)อไปใช,ค.าว)า private ด�งน&*
เมี �อท�าการคอมีไพื้ล� (Compile) ผ่ลท��ไดั�ค อmainClassD.java: 11 four has private
access in ClassD System.out.printf("%d%n",d.four); ^mainClassD.java: 18: four has private
access in ClassD System.out.printf("%d%n",obj.four); ^2 errors
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล57
ต�วอยู่)างต)อไปใช,ค.าว)า private ด�งน&*
การใช้�งาน private มี�ข้�อดั�ในแง�ข้องการร�กษาความี ปลอดัภั�ยข้องตั�วแปรหร อเมีธอดัภัายในคลาส เน �องจาก
คลาสอ �น ๆ ไมี�ว�าจะเป0นคลาสล%กหร อไมี�ก#ตัามีไมี�มี�ส(ทธ(ท��จะใช้�งานตั�วแปรหร อเมีธอดัท��ตั�องการสงวนไว�ใช้�เฉพื้าะคลาส
ตั�วเอง แตั�ถ�าตั�องการอ�างถ/งตั�วแปรดั�งกล�าวตั�องท�าการ สร�างเมีธอดัท��ค นค�าตั�วแปรน��นแทน ดั�งน��
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล58
ต�วอยู่)างต)อไปใช,ค.าว)า private ด�งน&*
class ClassE { private int five=5; public int getFive() { return five; } } class mainClassE { public static void main (String[] args) { ClassE obj = new ClassE(); System.out.printf("%d%n",obj.getFive()); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล59
ต�วอยู่)างต)อไปใช,ค.าว)า private ด�งน&*
ผ่ลล�พื้ธ�ท��ไดั�ค อ5
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล60
คอนสตริ�กุเตอริ�เมธอด(Constructor method)
คอนสตัร�กเตัอร�เมีธอดั เป0นเมีธอดัท��มี�ช้ �อเดั�ยวก�นก�บคลาสใช้�ก�าหนดัค�าเร(�มีตั�นให�ก�บตั�วแปร
คอนสตัร�กเตัอร�เมีธอดัไมี�จ�าเป0นตั�องสร�างไดั�เพื้�ยงคร��ง เดั�ยว จะสร�างหลาย ๆ คร��งก#สามีารถท�าไดั�แตั�ตั�องมี�เง �อนไข้
ว�าพื้ารามี(เตัอร�ท��ส�งไปย�งคอนสตัร�กเตัอร�เมีธอดัตั�องมี� จ�านวนไมี�เท�าก�น หร อ ถ�าจ�านวนเท�าก�น ช้น(ดัข้อง
พื้ารามี(เตัอร�ตั�องไมี�เหมี อนก�น
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล61
คอนสตริ�กุเตอริ�เมธอด(Constructor method)
class Sum { private int a, b, c; Sum(int x) { a = x; b = 0; c = 0; } Sum(int x, int y) { a = x; b = y; c = 0; }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล62
คอนสตริ�กุเตอริ�เมธอด(Constructor method)
Sum(int x, int y,int z) { a = x; b = y; c = z; } public int findSum() { return (a + b + c); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล63
คอนสตริ�กุเตอริ�เมธอด(Constructor method)
class mainSum { public static void main(String[] args) { Sum i = new Sum(10); Sum j = new Sum(9,8); Sum k = new Sum(7,6,5); System.out.printf("Sum of i is %d%n", i.findSum()); System.out.printf("Sum of j is %d%n", j.findSum()); System.out.printf("Sum of k is %d%n", k.findSum()); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล64
คอนสตริ�กุเตอริ�เมธอด(Constructor method)
ผ่ลล�พื้ธ�ท��ไดั�ค อSum of i is 10Sum of j is 17Sum of k is 18
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล65
คอนสตริ�กุเตอริ�แอนด�โอเวอริ�โหลดเมธอด
จะเห#นไดั�ว�าโปรแกรมีจาวาเร�ยกใช้�คอนสตัร�กเตัอร�เมีธอดั ไดั�ถ%กตั�องตัามีท��ออกแบบไว� เราเร�ยกการสร�างคอนสตัร�ก
เตัอร�เมีธอดัมีากกว�าหน/�งคร��งว�า คอนสตัร�กเตัอร�แอนดั� โอเวอร�โหลดัเมีธอดั (Constructor and overload
method) ตั�วอย�างตั�อไปก#แสดังถ/งการใช้�งานคอนสตัร�ก เตัอร�แอนดั�โอเวอร�โหลดัเมีธอดั แตั�เป0นกรณ�ท��พื้ารามี(เตัอร�
มี�จ�านวนเท�าก�น แตั�แตักตั�างก�นท��ช้น(ดัข้องพื้ารามี(เตัอร�
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล66
คอนสตริ�กุเตอริ�แอนด�โอเวอริ�โหลดเมธอด
class Total { private double a, b, c; Total(double x, double y, double z) { a = x; b = y; c = z; }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล67
คอนสตริ�กุเตอริ�แอนด�โอเวอริ�โหลดเมธอด
Total(int x, double y, float z) { a = x; b = y; c = z; } public double findTotal() { return (a + b + c); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล68
คอนสตริ�กุเตอริ�แอนด�โอเวอริ�โหลดเมธอด
class mainTotal { public static void main(String[] args) { Total i = new Total(8.0,6.0,3.0); Total j = new Total(3,7.0,9.0); System.out.printf("Total of i is
%.2f%n", i.findTotal()); System.out.printf("Total of j is
%.2f%n", j.findTotal()); }}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล69
คอนสตริ�กุเตอริ�แอนด�โอเวอริ�โหลดเมธอด
ผ่ลล�พื้ธ�ท��ไดั�ค อTotal of i is 1700Total of j is 1900.
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล70
โอเวอริ�โหลดเมธอด (Overload method)
เมีธอดัท��มี�ช้ �อซึ่��าก�นเองไมี�ซึ่��าก�นก�บคลาสเราเร�ยกว�าโอเวอร�โหลดัเมีธอดั
class Overload { private double a, b, c; Overload() { a = b = c = 0.0; }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล71
โอเวอริ�โหลดเมธอด (Overload method)
public double findSum(double x) { a=x; return (a+b+c); } public double findSum(double x, int y) { a=x; b=y; return (a+b+c); } public double findSum(double x, int y, double z) { a=x; b=y; c=z; return (a+b+c); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล72
โอเวอริ�โหลดเมธอด (Overload method)
class mainOverload { public static void main(String[] args) { Overload obj = new Overload(); double x = obj.findSum(5.0); double y = obj.findSum(7.0,9); double z = obj.findSum(2.0,4,6.0); System.out.printf("Sum of x is %.1f%n",x); System.out.printf("Sum of y is %.1f%n",y);
System.out.printf("Sum of z is %.1f%n",z); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล73
โอเวอริ�โหลดเมธอด (Overload method)
ผ่ลล�พื้ธ�ท��ไดั�ค อSum of x is 50.Sum of y is 160.Sum of z is 120.
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล74
แพิ!คเกุจ (Package)
แพื้#คเกจเป0นท��รวมีข้องคลาสตั�าง ๆ ท��โปรแกรมีอาจเร�ยก ใช้�เมี �อตั�องการ และย�งเป0นท��รวมีข้องเมี ธอดัตั�าง ๆ ท��อย%� ในคลาสน��น ๆ ตัามีท��ผ่%�เข้�ยนแพื้#คเกจไดั�ออกแบบไว�
เช้�น java.util ท��เราเคยใช้�งานในการเข้�ยนโปรแกรมีร�บข้�อมี%ลเข้�าทางค�ย�บอร�ดั
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล75
กุาริสริ,างแพิ!คเกุจ
ว(ธ�การก#ค อก�อนจะตั��งช้ �อข้องคลาส ให�ตั��งช้ �อข้องแพื้#คเกจ ก�อนโดัยใส�ค�าว�า package น�าหน�าช้ �อข้องแพื้#คเกจ
เหมี อนการตั��งช้ �อข้องคลาสหล�งค�าว�าคลาสน��นเอง เช้�นpackage MyPack;
public class MyClass { … …
}
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล76
กุาริสริ,างแพิ!คเกุจ
อาจสงส�ยว�าท�าไมีตั�องใส�ค�าว�า public หน�าคลาสMyClass ดั�วยในเมี �อท2กคร��งก#ไมี�เห#นจ�าเป0นตั�องใส�
เหตั2ผ่ลท��ตั�องใส�ค�าว�า public หน�าคลาส เพื้ราะถ�าไมี�ใส� โปรแกรมีหร อคลาสอ �น ๆ ท��อย%�นอกแพื้#คเกจ MyPack จะ
ไมี�สามีารถเร�ยกใช้�งานคลาสน��ไดั�เพื้ราะอย%�คนละแพื้#คเกจ ก�น
ตั�วอย�างตั�อไปจะเป0นการสร�างแพื้#คเกจช้ �อ MyPack โดัย ในแพื้#คเกจน��ประกอบไปดั�วยคลาส A และ คลาส B จากน��น
สร�างแพื้#คเกจย�อยในแพื้#คเกจ MyPack อ�กตั��งช้ �อว�าsubPack ในแพื้#คเกจน��จะมี�คลาส C อ�กคลาสหน/�ง
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล77
กุาริสริ,างแพิ!คเกุจ
package MyPack; public class A { public A() { System.out.printf("This is
class A.%n"); } } ท�าการบ�นท/กไว�ในไฟิล�ช้ �อว�า A.java
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล78
กุาริสริ,างแพิ!คเกุจ
package MyPack; public class B { public B() { System.out.printf("This is class B.
%n"); } } ท�าการบ�นท/กไว�ในไฟิล�ช้ �อว�า B.java
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล79
กุาริสริ,างแพิ!คเกุจ
package MyPack.subPack; public class C { public C() { System.out.printf("This is class C.
%n"); } } ท�าการบ�นท/กไว�ในไฟิล�ช้ �อว�า C.java
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล80
กุาริสริ,างแพิ!คเกุจ
ในการคอมีไพื้ล� (Compile) ไฟิล�ท��งหมีดัท��สร�างข้/�นตั�องใช้� ค�าส��ง javac –d ดั�งน��
javac –d [ช้ �อไดัเรคทอร��ท��ตั�องการเก#บแพื้#คเกจ] [ช้ �อไฟิล�.java] เช้�น
javac –d E:\Principle A.javajavac –d E:\Principle B.javajavac –d E:\Principle C.java
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล81
กุาริสริ,างแพิ!คเกุจ
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล82
ตั�อมีาเราก#สร�างโปรแกรมีท��มี�การเร�ยกใช้�แพื้#คเกจตั�าง ๆ ท�� ไดั�สร�างข้/�นโดัยก�าหนดัให�มี�การเร�ยกใช้�คลาสตั�าง ๆ ท��สร�าง
ข้/�น การเร�ยกใช้�แพื้#คเกจตั�าง ๆ ท�าไดั�ดั�วยการใช้�ค�าส��งimport ดั�งตั�วอย�างตั�อไปน��
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล83
กุาริสริ,างแพิ!คเกุจ
import MyPack.A; import MyPack.B; import MyPack.subPack.C; class mainPackage { public static void main(String[] args) { A obj1 = new A(); B obj2 = new B(); C obj3 = new C(); } }
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล84
กุาริสริ,างแพิ!คเกุจ
ผ่ลล�พื้ธ�ท��ไดั�ค อThis is class A.This is class B.This is class C.
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล85
แบบฝึ6กุห�ด
จงสร�างคลาส Student ท��มี�ตั�วแปร รห�ส ช้ �อ นามีสก2ล คะแนนเก#บ เกรดั แล�วสร�างเมีธอดัเพื้ �อร�บข้�อมี%ลรห�ส ช้ �อ
นามีสก2ล คะแนนเก#บ เข้�าทางค�ย�บอร�ดั พื้ร�อมีท��งสร�างเมีธอดัท��ท�าหน�าท��ค�านวณเกรดัโดัยร�บคะแนนเก#บมีาแล�วค นค�ากล�บ
เป0นเกรดัท��ไดั�ร�บ โดัยมี�เง �อนไข้ค อ ถ�าคะแนนอย%�ระหว�าง 80-100 ไดั�เกรดั A 70-79 ไดั�เกรดั B 60-69 ไดั�เกรดั C 50-59 ไดั�เกรดั D ตั��ากว�า 50 ไดั�เกรดั F จากน��นสร�างเมีธอดัท��ท�า
หน�าท��แสดังผ่ลล�พื้ธ� รห�ส ช้ �อ นามีสก2ล คะแนนเก#บ และเกรดัท�� ไดั�ออกทางจอภัาพื้ ตั�อมีาให�สร�างคลาส mainStudent เพื้ �อ
สร�างออปเจคท��ส บทอดัค2ณสมีบ�ตั(มีาจากคลาส Student แล�วเร�ยกใช้� เมีธอดัตั�าง ๆ ท��มี�อย%�ในคลาส Student
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล86
แบบฝึ6กุห�ด
จงเข้�ยนคลาสท��มี�เมีธอดัท��ใช้�ร�บค�าตั�วเลข้ 3 ตั�วเข้�าทาง ค�ย�บอร�ดั โดัยพื้ารามี(เตัอร�ในเมีธอดัท��เป0นเลข้ 3 ตั�วตั�อง
ครอบคล2มีท��งเลข้จ�านวนเตั#มีท��งหมีดั เลข้ทศน(ยมีท��งหมีดั หร อเลข้จ�านวนเตั#มีผ่สมีก�บเลข้ทศน(ยมี จากน��นให�สร�าง
เมีธอดัท��ท�าหน�าท��หาค�าเฉล��ยข้องเลข้ท��งสามี จากน��นให�สร�างคลาสท��ท�าการสร�างออปเจคเพื้ �อส บทอดัค2ณสมีบ�ตั(ข้องคลาสแรกแล�วเร�ยกใช้�เมีธอดัร�บค�าตั�วเลข้ท��งสามีและ
เมีธอดัหาค�าเฉล��ยข้องเลข้ท��งสามี เมี �อประมีวลผ่ลเสร#จให�แสดังผ่ลล�พื้ธ�ค�าเฉล��ยท��ไดั�ออกทางจอภัาพื้
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล87
แบบฝึ6กุห�ด
จงสร�างคลาสท��มี�เมีธอดัท��ท�าหน�าท��ร �บเลข้จ�านวนเตั#มีเข้�า ทางค�ย�บอร�ดั 2 ตั�ว เมีธอดับวก ลบ ค%ณ หารเอาแตั� เลข้จ�านวนเตั#มี และหารเอาแตั�เศษข้องเลข้จ�านวนเตั#มี 2 ตั�วแล�วส�งค�ากล�บ จากน��นให�สร�างคลาสท��สร�างออปเจคเพื้ �อ
ส บทอดัค2ณสมีบ�ตั(มีากจากคลาสแรกแล�วท�าการเร�ยกใช้� เมีธอดัเหล�าน��น โดัยให�แสดังผ่ลล�พื้ธ�จากการค�านวณออก
ทางจอภัาพื้ดั�วย
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล88
ผศ . พิ�เชษฐ์� ศ�ริ�ริ�ตนไพิศาลกุ�ล