บทที่ 6การพัฒ นาโปรแกรมภาษา    จาวาเชิง ออปเจ็ค  (Object Oriented Java    Programming)   อ.ธนิศ า เครือ ไวศยวรรณ  คณะเทคโน...
วัต ถุป ระสงค์ อธิบ ายเมธอด       และการเรีย กใช้เ มธอด อธิบ ายคีย เ วิร ์ด ทีใ ช้เ ป็น             ์          ่        ...
การเขีย นโปรแกรมภาษาจาวาเชิง           ออปเจ็ค ตัว อย่า งโปรแกรมในบททีผ ่า น ๆมา                         ่              บ...
ตัว อย่า งโปรแกรมที่ท ุก คำา สัง อยู่ใ น                               ่            เมธอด main()  public class AllInMain {...
ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การเชิง              ออปเจ็ค  public class NumericalClass {{   public class NumericalClass  ...
ตัว อย่า งโปรแกรมที่ท ุก เมธอดอยู่          ในคลาสเดีย วกันpublic class NumericalClassV1 { public class NumericalClassV1 {...
รูป แบบการเรีย กใช้เ มธอด รูป แบบของคำา สั่ง ทีม ก ารเรีย กใช้เ มธอดเป็น ดัง นี้                       ่ ี          obj.m...
การเรีย กใช้เ มธอด เมธอดทีก ำา หนดขึ้น ในคลาสใดๆสามารถเรีย กใช้         ่ งานได้ส องรูป แบบคือ  • การเรีย กใช้ง านจากคลาส...
ตัว อย่า งโปรแกรมที่ม ีก ารเรีย กใช้       เมธอดในคลาสเดีย วกันpublic class NumericalClassV2 { public class NumericalClass...
การส่ง ผ่า น argument กรณีท ี่เ มธอด มี argument       ทีจ ะรับ ค่า เพือ นำา ไปใช้ใ น                                    ...
ตัว อย่า งโปรแกรมpublic class Student { public class Student {        String id;         String id;        String name;   ...
argument ของเมธอด argumentของเมธอดจะมีช นิด ข้อ มูล เป็น สอง แบบตามชนิด ข้อ มูล ของ ตัว แปรดัง นี้  • argument         ที...
argument ที่ม ีช นิด ข้อ มูล แบบ            อ้า งอิง เราจะต้อ งส่ง ออปเจ็ค ทีม ช นิด ข้อ มูล ทีส อดคล้อ งไป              ...
ตัว อย่า งโปรแกรมที่มีก ารส่ง   argument ที่เ ป็น ออปเจ็คimport java.util.*; import java.util.*;public class StudentV1 { p...
ชนิด ข้อ มูล และจำา นวนของ              argument ชนิด ข้อ มูล ของ argument ที่จ ะส่ง ผ่า นไปยัง เมธอดไม่จ ำา เป็น ทีจ ะต้...
ตัว อย่า งโปรแกรมที่มีก ารส่ง   argument จำา นวนสองตัวpublic class NumericalSample { public class NumericalSample {       ...
การเปลีย นแปลงค่า ของ              ่            argument การส่ง argument ทีมีช นิด ข้อ มูล เป็น แบบพื้น ฐาน              ...
ตัว อย่า งโปรแกรมที่แ สดงการ   เปลี่ย นแปลงค่า ของ argumentimport java.util.*; import java.util.*;public class ArgumentPas...
ตัว อย่า งโปรแกรมที่แ สดงการ     เปลี่ย นแปลงค่า ของ argument       public static void main(String args[]) {        public...
การรับ ค่า ที่ส ง กลับ มาจากเมธอด                  ่ เมธอดใดๆของคลาสสามารถทีจ ะมีค ่า ทีส ่ง กลับ มา                     ...
modifier ของเมธอด modifier       ของเมธอดประกอบด้ว ย  • access modifier  • static  • abstract  • synchronized  • final a...
ตัว อย่า งโปรแกรมที่แ สดงการประกาศ          เมธอดและคุณ ลัก ษณะpublic class PrivateStudent { public class PrivateStudent {...
ตัว อย่า งโปรแกรมที่แ สดงการประกาศ          เมธอดและคุณ ลัก ษณะpublic class TestPrivateStudent { public class TestPrivateS...
ตัว อย่า งโปรแกรมpublic class ThisStudent { public class ThisStudent {        private String id;         private String id...
การเขีย นโปรแกรมโดยใช้ห ลัก        การของการห่อ หุ้ม คุณ ลัก ษณะเด่น ของโปรแกรมเชิง ออปเจ็ค มีอ ยู่ สามอย่า งคือ การห่อ ห...
ตัว อย่า งโปรแกรมที่ไ ม่ไ ด้ใ ช้ห ลัก         การของการห่อ หุ้มpublic class Student { public class Student {        String...
เมธอดแบบ setter เมธอดแบบ      accessor แบ่ง ออกได้เ ป็น สอง ประเภทคือ  • เมธอดแบบ    setter  • เมธอดแบบ    getter เมธอดแ...
ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การ            ของการห่อ หุ้มpublic class Student {{ public class Student         String ID;...
เมธอดแบบ getter เมธอดแบบ     getter จะใช้ใ นการเรีย กค่า ของ คุณ ลัก ษณะ โดยทัว ไปชื่อ ของเมธอดแบบ       ่              ...
ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การ            ของการห่อ หุ้มpublic class EncapStudent { public class EncapStudent {        ...
ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การ           ของการห่อ หุ้ม     public String getID() {      public String getID() {       ...
คีย ์เ วิร ์ด   this คีย เวิร ์ด this   หมายถึง ออปเจ็ค ของตัว เอง เราสามารถทีจ ะเรีย กใช้เ มธอดหรือ คุณ ลัก ษณะ        ...
การเขีย นโปรแกรมโดยใช้ห ลัก      การของการสืบ ทอด ข้อ ดีข องการสืบ ทอดคือ การนำา คลาสทีม อ ยูแ ล้ว มา                    ...
ตัว อย่า งโปรแกรม แสดงคลาสที่ช ื่อ                         Student public class Student {  public class Student {         ...
ตัว อย่า งโปรแกรมที่ไ ม่ไ ด้ใ ช้ห ลัก        การของการสืบ ทอดpublic class GradStudent { public class GradStudent {        ...
ตัว อย่า งโปรแกรมที่ไ ม่ไ ด้ใ ช้ห ลัก         การของการสืบ ทอด     public void setThesisTitle(String t) {      public void...
ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การ            ของการสืบ ทอดpublic class GradStudent extends Student { public class GradStud...
รูป แสดงหลัก การของการสืบ ทอด
ตัว อย่า งการสืบ ทอดทีไ ม่ถ ูก ต้อ ง                        ่ เราสามารถทีต รวจสอบหลัก การของการสืบ ทอด             ่ ด้ว ...
ตัว อย่า งการสืบ ทอดที่ถ ูก ต้อ ง public class Clothing {       char size;       float price;}public class Shirt extends C...
คีย ์เ วิร ์ด   protected คุณ ลัก ษณะหรือ เมธอดของ         superclass ทีม ี                                              ...
คีย ์เ วิร ์ด   protected ภาษาจาวากำา หนดให้ม ี   access modifier ทีช ื่อ                                              ่ ...
ตัว อย่า งโปรแกรม     public class Student {      public class Student {      protected String id;       protected String ...
คลาสที่ช ื่อ       Object ภาษาจาวาได้ก ำา หนดให้ค ลาสใดๆ      สามารถจะ  สืบ ทอดคลาสอื่น ได้เ พีย งคลาสเดีย วเท่า นัน     ...
คีย ์เ วิร ์ด   super   super    เป็น คีย เ วิร ์ด ทีใ ช้ใ นการอ้า งอิง ถึง                      ์          ่    supercla...
การเขีย นโปรแกรมโดยใช้ห ลัก การของ         การมีไ ด้ห ลายรูป แบบ การมีไ ด้ห ลายรูป แบบหมายถึง     คุณ สมบัต ิข องออป เจ็ค...
Dynamic Binding ข้อ ดีข องการมีไ ด้ห ลายรูป แบบอีก ประการหนึง                                              ่    คือ  การท...
รูป แสดงการมีไ ด้ห ลายรูป แบบ ตัว อย่า ง     Student s1 = new Student();     Student s1 = new GradStudent();     Student ...
เมธอดแบบ Overloaded ภาษาจาวาอนุญ าตให้ค ลาสใดๆมีเ มธอดทีม ช อ                                      ่ ี ื่ เดีย วกัน มากกว...
ตัว อย่า งโปรแกรมpublic class StudentV2 { public class StudentV2 {        private String id;         private String id;   ...
เมธอดแบบ overridden การกำา หนดเมธอดแบบ     overridden เป็น หลัก การ ทีส บ เนือ งมาจากหลัก การของการสืบ ทอด โดย   ่ ื    ่...
ตัว อย่า ง โปรแกรมแสดงเมธอดแบบ             overriddenclass Student { class Student {        ::        public void showDeta...
Virtual Method Invocation โปรแกรมภาษาจาวาพิจ ารณาเรีย กใช้เ มธอดจาก ชนิด ของออปเจ็ค ทีส ร้า งขึ้น ตัว อย่า งเช่น คำา สัง ...
การส่ง ผ่า น argument ได้ห ลาย                 รูป แบบ ในกรณีท เ มธอดมี          ี่        argument เป็น ข้อ มูล ชนิด    ...
ตัว ดำา เนิน การ        instanceof คีย เ วิร ์ด instanceof      ์              เป็น ตัว ดำา เนิน การทีใ ช้ก ับ ออป       ...
ตัว อย่า ง เมธอดที่แ สดงการใช้                   instanceofpublic void printInfo(Student s) { public void printInfo(Studen...
การ Casting ออปเจ็ค การ Casting ออปเจ็ค จะทำา ให้ต ัว แปร ของ subclass สามารถทีจ ะอ้า งอิง ถึง ออปเจ็ค ของ               ...
การเรีย กใช้เ มธอดของออปเจ็ค การเรีย กใช้เ มธอดของออปเจ็ค ทีท ำา การ                                 ่           casting ...
ตัว อย่า งโปรแกรมแสดงการเรีย ก            ใช้เ มธอด public class Student {  public class Student {        private String i...
ตัว อย่า งโปรแกรมแสดงการเรีย ก            ใช้เ มธอด public class GradStudent extends Student {  public class GradStudent e...
ตัว อย่า งโปรแกรมแสดงการเรีย ก            ใช้เ มธอด public class TestCallingMethods {  public class TestCallingMethods {  ...
Constructor constructor      เป็น เมธอดทีม ช ื่อ เดีย วกับ ชื่อ คลาส                               ่ ี ซึ่ง มีร ูป แบบดัง...
ตัว อย่า งโปรแกรมแสดงการเรีย ก          ใช้ constructorpublic class Student { public class Student {        private String...
คำา สั่ง     new() มีข ั้น ตอนการทำา งานดัง นี้   • กำา หนดเนื้อ ที่ใ นหน่ว ยความจำา ให้ก ับ ออปเจ็ค   • กำา หนดค่า เริ่ม...
รูป แสดงตัว อย่า งการทำา งานขั้น            ตอนคำา สั่ง new คำา สั่ง     MyDate d1 = new MyDate(16,8,1972);             ข...
Constructor แบบ Overloaded เราสามารถทีจ ะสร้า ง             ่     constructor แบบ  overloaded ของคลาสได้ constructor    ...
ตัว อย่า งโปรแกรมแสดงconstructor แบบ overloadedpublic class Student { public class Student {        private String id;    ...
เมธอด this() เมธอดทีช ื่อ this()         ่       เป็น การเรีย กใช้ constructor ของคลาสตัว เอง โดยจะต้อ งเป็น คำา สัง แรกส...
ตัว อย่า งโปรแกรมแสดงการใช้          เมธอด this() public class Student {  public class Student {        private String id;...
เมธอด       super() constructorของ superclass จะไม่ส บ ทอด                                   ื มายัง subclass เราสามารถท...
ตัว อย่า ง คลาสทีม ี constructor ใน                  ่             รูป แบบต่า งๆ public class Student {  public class Stud...
ขั้น ตอนการทำา งานของ                 constructor1.   ถ้า มีค ำา สั่ง this() ใน constructor ก็จ ะเรีย กใช้     constructor...
เมธอดของคลาสที่ช ื่อ                       Object คลาสทีช ื่อ Object        ่                 จะเป็น คลาสทีท ก ๆคลาสจะ   ...
เมธอด     toString() คลาสทีต ้อ งการจะแปลงข้อ มูล เป็น String        ่                                    จะต้อ งมี  เมธอ...
ตัว อย่า ง โปรแกรมแสดงเมธอด                     toString()public class Student { public class Student {        private Str...
เมธอด       equals() คลาสทีต ้อ งการสร้า งเมธอดเพือ เปรีย บเทีย บ ค่า ขอ        ่                      ่ ง ออปเจ็ค ว่า เท...
ตัว อย่า ง โปรแกรมแสดงเมธอด                    equals()class Student {  class Student {      private String name;       pr...
คลาสประเภท Wrapper คลาสประเภท       Wrapper จะช่ว ยในการสร้า งออป เจ็ค ทีเ ก็บ ชนิด ข้อ มูล แบบพืน ฐานไว้ใ นคอลเล็ก ชั่น ...
ตัว อย่า งโปรแกรมแสดงการใช้    คลาสประเภท Wrapperpublic class ShowWrapper { public class ShowWrapper {    public static vo...
คุณ ลัก ษณะแบบ          static คีย เ วิร ์ด static      ์      สามารถทีจ ะใช้ก ับ คุณ ลัก ษณะและ                     ่  เ...
ตัว อย่า งโปรแกรมแสดงการใช้          คีย ์เ วิร ์ด static public class Student {  public class Student {       static int ...
เมธอดแบบ              static เมธอดโดยทัว ไปจะ มี            ่             modifier เป็น แบบ non-  static เมธอดทีม ี     ...
Static Initializer StaticInitializer คือ บล็อ กในคลาสใดๆทีอ ยู่ ่ นอกเมธอด และมีค ีย เ วิร ์ด static เพือ นิย ามให้เ ป็น ...
ตัว อย่า งโปรแกรมแสดง Static           Initializer   public class TestStaticBlock {    public class TestStaticBlock {     ...
คีย ์เ วิร ์ด   final คีย เ วิร ์ด final      ์                สามารถจะใช้ไ ด้ก บ คลาส ตัว แปร                           ...
คลาสแบบ          abstract คลาสทีม ี        ่    modifier เป็น abstract หมายความว่า  คลาสนัน ยัง เป็น คลาสทีไ ม่ส มบูร ณ์ ...
ตัว อย่า งโปรแกรมแสดงคลาสแบบ                       abstract public abstract class Student {  public abstract class Student...
ตัว อย่า งคลาสที่ส บ ทอดมาจาก                    ื        คลาสแบบ abstractpublic class FullTimeStudent extends Student { p...
อิน เตอร์เ ฟส อิน เตอร์เ ฟส (interface) มีล ัก ษณะคล้า ยกับ คลาส แบบ abstract แต่จ ะประกอบด้ว ยเมธอดทีย ง ไม่            ...
อิน เตอร์เ ฟส อิน เตอร์เ ฟสจะเหมือ นกับ คลาสแบบ abstractตรงที่ เราจะไม่ส ามารถสร้า งออปเจ็ค ของอิน เตอร์เ ฟสได้ ประโยชน์...
ตัว อย่า งอิน เตอร์เ ฟส     public interface Student {      public interface Student {          public void setID(String I...
ตัว อย่า ง คลาสที่ implements         อิน เตอร์เ ฟสpublic class PartTimeStudent implements Student { public class PartTime...
ตัว อย่า ง คลาสที่ implements             อิน เตอร์เ ฟส     public void setGPA(double GPA) {      public void setGPA(doubl...
คลาสภายใน คลาสภายใน  (Inner class) คือ คลาสทีป ระกาศ                                           ่ อยูภ ายในคลาสอื่น ๆ ซึง ...
คลาสภายในทีอ ยู่ภ ายในคลาส              ่ กรณีน เ ป็น การประกาศคลาสภายในคลาสอื่น ที่        ี้ เรีย กว่า คลาสภายนอก (Oute...
ตัว อย่า งโปรแกรมแสดงคลาสที่อ ยู่            ภายในคลาส public class Outer {  public class Outer {        public void metho...
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Java Programming [6/12] : Object Oriented Java Programming
Upcoming SlideShare
Loading in …5
×

Java Programming [6/12] : Object Oriented Java Programming

984 views

Published on

เอกสารแนะนำการเขียนโปรแกรมภาษาจาวา

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
984
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java Programming [6/12] : Object Oriented Java Programming

  1. 1. บทที่ 6การพัฒ นาโปรแกรมภาษา จาวาเชิง ออปเจ็ค (Object Oriented Java Programming) อ.ธนิศ า เครือ ไวศยวรรณ คณะเทคโนโลยีส ารสนเทศ
  2. 2. วัต ถุป ระสงค์ อธิบ ายเมธอด และการเรีย กใช้เ มธอด อธิบ ายคีย เ วิร ์ด ทีใ ช้เ ป็น ์ ่ modifier ของเมธอด แนะนำา การเขีย นโปรแกรมภาษาจาวาเชิง ออปเจ็ค อธิบ ายคุณ ลัก ษณะเด่น ของโปรแกรมเชิง ออปเจ็ค อธิบ ายความหมายของ Constructor
  3. 3. การเขีย นโปรแกรมภาษาจาวาเชิง ออปเจ็ค ตัว อย่า งโปรแกรมในบททีผ ่า น ๆมา ่ บางครั้ง จะ เขีย นทุก คำา สัง อยู่ภ ายใน เมธอดทีช ื่อ main() ซึง ่ ่ ่ ไม่ไ ด้ใ ช้ห ลัก การเชิง ออปเจ็ค และไม่เ หมาะทีจ ะนำา ่ ไปใช้ใ นทางปฏิบ ัต ิเ มือ โปรแกรมมีข นาดใหญ่ข น ่ ึ้ การเขีย นโปรแกรมเชิง ออปเจ็ค ทีด ีจ ะต้อ งมีก าร ่ กำา หนดเมธอดต่า งๆให้ก ับ คลาส
  4. 4. ตัว อย่า งโปรแกรมที่ท ุก คำา สัง อยู่ใ น ่ เมธอด main() public class AllInMain { public class AllInMain { public static void main(String args[]) { public static void main(String args[]) { double score = Math.random()*100; double score = Math.random()*100; if (score >= 80) { if (score >= 80) { System.out.println("Grade is A"); System.out.println("Grade is A"); } else if (score >= 70) { } else if (score >= 70) { System.out.println("Grade is B"); System.out.println("Grade is B"); } else if (score >= 60){ } else if (score >= 60){ System.out.println("Grade is C"); System.out.println("Grade is C"); } else if (score >= 50){ } else if (score >= 50){ System.out.println("Grade is D"); System.out.println("Grade is D"); } else { } else { System.out.println("Grade is F"); System.out.println("Grade is F"); }} }} }}
  5. 5. ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การเชิง ออปเจ็ค public class NumericalClass {{ public class NumericalClass public void calculate() {{ public void calculate() double score == Math.random()*100; double score Math.random()*100; if (score >= 80) {{ if (score >= 80) System.out.println("Grade is A"); System.out.println("Grade is A"); }} else if (score >= 70) {{ else if (score >= 70) System.out.println("Grade is B"); System.out.println("Grade is B"); }} else if (score >= 60){ else if (score >= 60){ System.out.println("Grade is C"); System.out.println("Grade is C"); }} else if (score >= 50){ else if (score >= 50){ System.out.println("Grade is D"); System.out.println("Grade is D"); }} else {{ else System.out.println("Grade is F"); System.out.println("Grade is F"); }} }} }} ----------------------------------------------------------------- ----------------------------------------------------------------- ------------------------- ------------------------- public class MyMain { public class MyMain { public static void main(String args[]) {{ public static void main(String args[]) NumericalClass obj == new NumericalClass(); NumericalClass obj new NumericalClass(); obj.calculate(); obj.calculate();
  6. 6. ตัว อย่า งโปรแกรมที่ท ุก เมธอดอยู่ ในคลาสเดีย วกันpublic class NumericalClassV1 { public class NumericalClassV1 { public void calculate() { public void calculate() { double score = Math.random()*100; double score = Math.random()*100; if (score >= 80) { if (score >= 80) { System.out.println("Grade is A"); System.out.println("Grade is A"); } else if (score >= 70) { } else if (score >= 70) { System.out.println("Grade is B"); System.out.println("Grade is B"); } else if (score >= 60){ } else if (score >= 60){ System.out.println("Grade is C"); System.out.println("Grade is C"); } else if (score >= 50){ } else if (score >= 50){ System.out.println("Grade is D"); System.out.println("Grade is D"); } else { } else { System.out.println("Grade is F"); System.out.println("Grade is F"); }} }} public static void main(String args[]) { public static void main(String args[]) { NumericalClassV1 obj = new NumericalClassV1(); NumericalClassV1 obj = new NumericalClassV1(); obj.calculate(); obj.calculate(); }}}}
  7. 7. รูป แบบการเรีย กใช้เ มธอด รูป แบบของคำา สั่ง ทีม ก ารเรีย กใช้เ มธอดเป็น ดัง นี้ ่ ี obj.methodName([arguments]); arguments อาจจะเป็น ข้อ มูล ค่า คงทีห รือ ตัว แปร ่ ชนิด ข้อ มูล ของ arguments ที่ใ ช้ใ นการเรีย กเมธอด จะต้อ งสอดคล้อ งกัน กับ ชนิด ข้อ มูล ของ arguments ของเมธอด
  8. 8. การเรีย กใช้เ มธอด เมธอดทีก ำา หนดขึ้น ในคลาสใดๆสามารถเรีย กใช้ ่ งานได้ส องรูป แบบคือ • การเรีย กใช้ง านจากคลาสที่ต ่า งกัน • การเรีย กใช้ง านภายในคลาสเดีย วกัน การเรีย กใช้เ มธอดจากคลาสทีต ่า งกัน ่ จะต้อ งมี การสร้า งออปเจ็ค ของคลาสทีม เ มธอดทีจ ะถูก เรีย ก ่ ี ่ ใช้ง านก่อ น จึง จะสามารถเรีย กใช้เ มธอดได้ การเรีย กใช้เ มธอดภายในคลาสเดีย วกัน ในบาง กรณีจ ะสามารถทำา ได้โ ดยไม่จ ำา เป็น ต้อ งสร้า งออป เจ็ค ของคลาสขึ้น มาก่อ น และสามารถเรีย กเมธอด ได้ท ก เมธอด ุ
  9. 9. ตัว อย่า งโปรแกรมที่ม ีก ารเรีย กใช้ เมธอดในคลาสเดีย วกันpublic class NumericalClassV2 { public class NumericalClassV2 { public void calculate() { public void calculate() { double score = Math.random()*100; double score = Math.random()*100; if (score >= 80) { if (score >= 80) { System.out.println("Grade is A"); System.out.println("Grade is A"); } else if (score >= 70) { } else if (score >= 70) { System.out.println("Grade is B"); System.out.println("Grade is B"); } else if (score >= 60){ } else if (score >= 60){ System.out.println("Grade is C"); System.out.println("Grade is C"); } else if (score >= 50){ } else if (score >= 50){ System.out.println("Grade is D"); System.out.println("Grade is D"); } else { } else { System.out.println("Grade is F"); System.out.println("Grade is F"); }} }} public void callMethod() { public void callMethod() { calculate(); calculate(); }}}}
  10. 10. การส่ง ผ่า น argument กรณีท ี่เ มธอด มี argument ทีจ ะรับ ค่า เพือ นำา ไปใช้ใ น ่ ่ เมธอด อาทิเ ช่น public void setGPA(double GPA) { ... } คำา สั่ง ทีเ รีย กใช้เ มธอดนี้ ่ จะต้อ งส่ง argument ทีม ี ่ ชนิด ข้อ มูล เป็น double ไป พร้อ มกับ ชื่อ เมธอด เช่น setGPA(3.0);
  11. 11. ตัว อย่า งโปรแกรมpublic class Student { public class Student { String id; String id; String name; String name; double gpa; double gpa; public void setGPA(double GPA) { public void setGPA(double GPA) { gpa = GPA; gpa = GPA; }} public double getGPA() { public double getGPA() { return gpa; return gpa; }}}}-------------------------------------------------------------- --------------------------------------------------------------public class MyMain2 { public class MyMain2 { public static void main(String args[]) { public static void main(String args[]) { Student s1 = new Student(); Student s1 = new Student(); s1.setGPA(3.0); s1.setGPA(3.0); }}}}
  12. 12. argument ของเมธอด argumentของเมธอดจะมีช นิด ข้อ มูล เป็น สอง แบบตามชนิด ข้อ มูล ของ ตัว แปรดัง นี้ • argument ที่ม ีช นิด ข้อ มูล แบบพื้น ฐาน • argument ที่ม ีช นิด ข้อ มูล แบบอ้า งอิง ในกรณีข อง argument ทีม ช นิด ข้อ มูล แบบพืน ่ ี ้ ฐาน เราสามารถทีจ ะส่ง ค่า คงทีข ้อ มูล ตัว แปร ่ ่ หรือ นิพ จน์ใ ห้ก ับ argument ได้ ตัว อย่า งเช่น • ค่า คงที่ข ้อ มูล เช่น s1.setGPA(3.0); • ตัว แปร เช่น double x = 3.0; s1.setGPA(x); • นิพ จน์ เช่น s1.setGPA(3.0+0.05);
  13. 13. argument ที่ม ีช นิด ข้อ มูล แบบ อ้า งอิง เราจะต้อ งส่ง ออปเจ็ค ทีม ช นิด ข้อ มูล ทีส อดคล้อ งไป ่ ี ่ เท่า นัน ้ ยกเว้น กรณีท ี่argument นัน มีช นิด ข้อ มูล เป็น ้ String ซึง ในกรณีน จ ะสามารถส่ง ข้อ มูล ค่า คงทีไ ด้ ่ ี้ ่
  14. 14. ตัว อย่า งโปรแกรมที่มีก ารส่ง argument ที่เ ป็น ออปเจ็คimport java.util.*; import java.util.*;public class StudentV1 { public class StudentV1 { String id; String id; String name; String name; Date dob; Date dob; public void setDOB(Date d) { public void setDOB(Date d) { dob = d; dob = d; }} public Date getDOB() { public Date getDOB() { return dob; return dob; }}}}----------------------------------------------------------------- ------------------------------------------------------------------------------------------ -------------------------public class TestStudentV1 { public class TestStudentV1 { public static void main(String args[]) { public static void main(String args[]) { StudentV1 s1 = new StudentV1(); StudentV1 s1 = new StudentV1(); Date d1 = new Date(16,12,1980); Date d1 = new Date(16,12,1980); s1.setDOB(d1); s1.setDOB(d1);
  15. 15. ชนิด ข้อ มูล และจำา นวนของ argument ชนิด ข้อ มูล ของ argument ที่จ ะส่ง ผ่า นไปยัง เมธอดไม่จ ำา เป็น ทีจ ะต้อ งเป็น ชนิด ข้อ มูล เดีย วกัน ่ แต่ต ้อ งเป็น ชนิด ข้อ มูล ทีส ามารถแปลงข้อ มูล ให้ ่ กว้า งขึ้น ได้โ ดยอัต โนมัต ิ เมธอดใดๆอาจมี argument สำา หรับ รับ ค่า มากกว่า หนึง ตัว แต่ก ารเรีย กใช้เ มธอดเหล่า นีจ ะ ่ ้ ต้อ งส่ง argument ทีม ช นิด ข้อ มูล ทีส อดคล้อ งกัน ่ ี ่ และมีจ ำา นวนเท่า กัน
  16. 16. ตัว อย่า งโปรแกรมที่มีก ารส่ง argument จำา นวนสองตัวpublic class NumericalSample { public class NumericalSample { public void calMax(int i, double d) { public void calMax(int i, double d) { if (i > d) { if (i > d) { System.out.println("Max = "+i); System.out.println("Max = "+i); } else { } else { System.out.println("Max = "+d); System.out.println("Max = "+d); }} }} public static void main(String args[]) { public static void main(String args[]) { NumericalSample obj = new NumericalSample(); NumericalSample obj = new NumericalSample(); obj.calMax(3,4.0); obj.calMax(3,4.0); }}}}
  17. 17. การเปลีย นแปลงค่า ของ ่ argument การส่ง argument ทีมีช นิด ข้อ มูล เป็น แบบพื้น ฐาน ่ หากมีก ารเปลี่ย นแปลงค่า ของ argument ภายในเมธอดทีถ ูก เรีย กใช้ง าน จะไม่ม ผ ลทำา ให้ ่ ี ค่า ของ argument ทีส ่ง ไปเปลี่ย นค่า ไปด้ว ย ่ การส่ง argument ทีม ช นิด ข้อ มูล เป็น แบบอ้า งอิง ่ ี จะเป็น การส่ง ตำา แหน่ง อ้า งอิง ของออปเจ็ค ไปให้ กับ เมธอดทีถ ูก เรีย กใช้ง าน ดัง นั้น การ ่ เปลี่ย นแปลงค่า ของคุณ ลัก ษณะขอ งออปเจ็ค จะมี ผลทำา ให้ค ่า ของคุณ ลัก ษณะของออปเจ็ค ทีส ่ง ไป ่ เปลี่ย นไปด้ว ย
  18. 18. ตัว อย่า งโปรแกรมที่แ สดงการ เปลี่ย นแปลงค่า ของ argumentimport java.util.*; import java.util.*;public class ArgumentPassing { public class ArgumentPassing { public void method1(int x) { public void method1(int x) { x = 3; x = 3; }} public void method2(Date d) { public void method2(Date d) { d.setDate(1); d.setDate(1); d.setMonth(1); d.setMonth(1); d.setYear(2002); d.setYear(2002); }} public int method3() { public int method3() { return 0; return 0; }}
  19. 19. ตัว อย่า งโปรแกรมที่แ สดงการ เปลี่ย นแปลงค่า ของ argument public static void main(String args[]) { public static void main(String args[]) { int x = 4; int x = 4; ArgumentPassing obj = new ArgumentPassing(); ArgumentPassing obj = new ArgumentPassing(); Date d1 = new Date(16,12,1980); Date d1 = new Date(16,12,1980); obj.method1(x); obj.method1(x); System.out.println("x = "+x); System.out.println("x = "+x); obj.method2(d1); obj.method2(d1); System.out.println("Date = "+d1); System.out.println("Date = "+d1); obj.method3(); obj.method3(); }}}}
  20. 20. การรับ ค่า ที่ส ง กลับ มาจากเมธอด ่ เมธอดใดๆของคลาสสามารถทีจ ะมีค ่า ทีส ่ง กลับ มา ่ ่ ได้ ซึ่ง ชนิด ข้อ มูล ของค่า ทีจ ะส่ง กลับ อาจเป็น ชนิด ่ ข้อ มูล แบบพืน ฐาน หรือ เป็น ชนิด ข้อ มูล แบบอ้า งอิง ้ เมธอดทีม ค ่า ทีจ ะส่ง กลับ มาจะต้อ งมีค ำา สั่ง return ่ ี ่ ซึ่ง จะระบุค ่า ทีส ่ง กลับ โดยมีร ูป แบบดัง นี้ ่ return value; คำา สั่ง ทีเ รีย กใช้เ มธอด ่ อาจจะรับ ค่า ทีส ่ง กลับ มา ่ เก็บ ไว้ใ นตัว แปรหรือ เป็น ตัว ถูก ดำา เนิน การใน นิพ จน์ ตัว อย่า งเช่น double d = getGPA(); System.out.println("GPA:"+getGPA());
  21. 21. modifier ของเมธอด modifier ของเมธอดประกอบด้ว ย • access modifier • static • abstract • synchronized • final access modifier ใช้เ พื่อ ระบุร ะดับ การเข้า ถึง โดยมีค ีย เ วิร ์ด ต่า งๆดัง นี้ ์ • public • protected • private • default (ไม่ร ะบุุค ีย ์เ วิร ์ด ใดๆ)
  22. 22. ตัว อย่า งโปรแกรมที่แ สดงการประกาศ เมธอดและคุณ ลัก ษณะpublic class PrivateStudent { public class PrivateStudent { private String id; private String id; private String name; private String name; private double gpa; private double gpa; public void setDetails(String ID,String n,double GPA) { public void setDetails(String ID,String n,double GPA) { id = ID; id = ID; name = n; name = n; gpa = GPA; gpa = GPA; }} public void showDetails() { public void showDetails() { System.out.println("ID: "+id); System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); System.out.println("GPA: "+gpa); }}}}
  23. 23. ตัว อย่า งโปรแกรมที่แ สดงการประกาศ เมธอดและคุณ ลัก ษณะpublic class TestPrivateStudent { public class TestPrivateStudent { public static void main(String args[]) { public static void main(String args[]) { PrivateStudent ps = new PrivateStudent(); PrivateStudent ps = new PrivateStudent(); /* /* ps.id = "12345"; ps.id = "12345"; illegal illegal ps.name = "Thana"; ps.name = "Thana"; illegal illegal ps.gpa = 3.25; ps.gpa = 3.25; illegal */ illegal */ ps.setDetails("12345","Thana",3.25); ps.setDetails("12345","Thana",3.25); ps.showDetails(); ps.showDetails(); }}}}
  24. 24. ตัว อย่า งโปรแกรมpublic class ThisStudent { public class ThisStudent { private String id; private String id; private String name; private String name; private double gpa; private double gpa; public void setDetails(String id,String name, double gpa) { public void setDetails(String id,String name, double gpa) { this.id = id; this.id = id; this.name = name; this.name = name; this.gpa = gpa; this.gpa = gpa; }} public void showDetails() { public void showDetails() { System.out.println("ID: "+this.id); System.out.println("ID: "+this.id); System.out.println("Name: "+name); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); System.out.println("GPA: "+gpa); }}}}
  25. 25. การเขีย นโปรแกรมโดยใช้ห ลัก การของการห่อ หุ้ม คุณ ลัก ษณะเด่น ของโปรแกรมเชิง ออปเจ็ค มีอ ยู่ สามอย่า งคือ การห่อ หุม การสืบ ทอด และการมีไ ด้ ้ หลายรูป แบบ ข้อ ดีข องการห่อ หุม ประการหนึง คือ การซ่อ นเร้น ้ ่ ข้อ มูล หลัก การห่อ หุม ของออปเจ็ค ทำา ได้ด ัง นี้ ้ • กำา หนดคุณ ลัก ษณะของออปเจ็ค ให้มี modifier เป็น private เพื่อ ซ่อ นไม่ใ ห้อ อปเจ็ค อื่น ๆเรีย กใช้ไ ด้ • กำา หนดเมธอดของออปเจ็ค ที่ต ้อ งการให้อ อปเจ็ค อื่น ๆ เรีย กใช้ใ ห้มี modifier เป็น public
  26. 26. ตัว อย่า งโปรแกรมที่ไ ม่ไ ด้ใ ช้ห ลัก การของการห่อ หุ้มpublic class Student { public class Student { String ID; String ID; String name; String name; public double gpa; public double gpa;}}----------------------------------------------------------------------- -------------------------------------------------------------------------------------------------- ---------------------------public class NoEncapDemo { public class NoEncapDemo { public static void main(String args[]) { public static void main(String args[]) { Student s1 = new Student(); Student s1 = new Student(); double temp = Double.parseDouble(args[0]); double temp = Double.parseDouble(args[0]); if ((temp<0) || (temp>4.00)) { if ((temp<0) || (temp>4.00)) { System.out.println("Incorrect Format!"); System.out.println("Incorrect Format!"); } else { } else { s1.gpa = temp; s1.gpa = temp; System.out.println("GPA: "+s1.gpa); System.out.println("GPA: "+s1.gpa); }} }}}}
  27. 27. เมธอดแบบ setter เมธอดแบบ accessor แบ่ง ออกได้เ ป็น สอง ประเภทคือ • เมธอดแบบ setter • เมธอดแบบ getter เมธอดแบบ setter จะใช้ใ นการกำา หนดค่า ของ คุณ ลัก ษณะ โดยทัว ไปชื่อ ของเมธอดแบบ ่ setter จะขึ้น ต้น ด้ว ยคำา ว่า set แล้ว ตามด้ว ยชื่อ ของคุณ ลัก ษณะ ซึ่ง มีร ูป แบบดัง นี้ public void setAttributeName(dataType arg) { attributeName = arg; }
  28. 28. ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การ ของการห่อ หุ้มpublic class Student {{ public class Student String ID; String ID; String name; String name; private double gpa; private double gpa; public void setGPA(double GPA) {{ public void setGPA(double GPA) if ((GPA<0) || (GPA>4.00)) {{ if ((GPA<0) || (GPA>4.00)) System.out.println("Incorrect Format!"); System.out.println("Incorrect Format!"); }} else {{ else gpa == GPA; gpa GPA; }} }} public double getGPA() {{ public double getGPA() return gpa; return gpa; }}}}----------------------------------------------------------------------- -------------------------------------------------------------------------------------------------- ---------------------------public class EncapDemo {public class EncapDemo { public static void main(String args[]) {{ public static void main(String args[]) Student s1 == new Student(); Student s1 new Student(); double temp == Double.parseDouble(args[0]); double temp Double.parseDouble(args[0]); s1.setGPA(temp); s1.setGPA(temp); System.out.println("GPA: "+s1.getGPA()); System.out.println("GPA: "+s1.getGPA());
  29. 29. เมธอดแบบ getter เมธอดแบบ getter จะใช้ใ นการเรีย กค่า ของ คุณ ลัก ษณะ โดยทัว ไปชื่อ ของเมธอดแบบ ่ getter จะขึน ต้น ้ ด้ว ยคำา ว่า get แล้ว ตามด้ว ยชื่อ ของคุณ ลัก ษณะ ซึ่ง มีร ูป แบบดัง นี้ public dataType getAttributeName() { return attributeName; }
  30. 30. ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การ ของการห่อ หุ้มpublic class EncapStudent { public class EncapStudent { private String id; private String id; private String name; private String name; private double gpa; private double gpa; public void setID(String ID) { public void setID(String ID) { id = ID; id = ID; }} public void setName(String n) { public void setName(String n) { name = n; name = n; }} public void setGPA(double GPA) { public void setGPA(double GPA) { if ((GPA<0) || (GPA>4.00)) { if ((GPA<0) || (GPA>4.00)) { System.out.println("Incorrect Format!"); System.out.println("Incorrect Format!"); } else { } else { gpa = GPA; gpa = GPA; }} }}
  31. 31. ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การ ของการห่อ หุ้ม public String getID() { public String getID() { return id; return id; }} public String getName() { public String getName() { return name; return name; }} public double getGPA() { public double getGPA() { return gpa; return gpa; }}}}
  32. 32. คีย ์เ วิร ์ด this คีย เวิร ์ด this หมายถึง ออปเจ็ค ของตัว เอง เราสามารถทีจ ะเรีย กใช้เ มธอดหรือ คุณ ลัก ษณะ ่ ภายในคลาสได้โ ดยใช้ คีย เ วิร ์ด ์ this ซึ่ง มีร ูป แบบดัง นี้ this.methodName(); this.attributeName โดยทัว ไปเราจะไม่ใ ช้ค ีย เ วิร ์ด this ่ ์ ในคำา สั่ง ยกเว้น ในกรณีท จ ำา เป็น ี่
  33. 33. การเขีย นโปรแกรมโดยใช้ห ลัก การของการสืบ ทอด ข้อ ดีข องการสืบ ทอดคือ การนำา คลาสทีม อ ยูแ ล้ว มา ่ ี ่ ใช้ใ หม่โ ดยการเพิม เติม คุณ ลัก ษณะหรือ เมธอดใน ่ คลาสใหม่ การพัฒ นาคลาสขึ้น ใหม่ท ช ื่อ GradStudent ี่ สามารถทีจ ะเลือ กวิธ ีก ารได้ส องแบบคือ ่ • สร้า งคลาสขึ้น มาใหม่โ ดยไม่อ ้า งอิง กับ คลาสเดิม ที่ช ื่อ Student • สร้า งคลาสที่ส ืบ ทอดมาจากคลาสเดิม ที่ช ื่อ Student
  34. 34. ตัว อย่า งโปรแกรม แสดงคลาสที่ช ื่อ Student public class Student { public class Student { private String id; private String id; private String name; private String name; private double gpa; private double gpa; public void setID(String ID) { public void setID(String ID) { id = ID; id = ID; }} public void setName(String n) { public void setName(String n) { name = n; name = n; }} public void setGPA(double GPA) { public void setGPA(double GPA) { gpa = GPA; gpa = GPA; }} public void showDetails() { public void showDetails() { System.out.println("ID: "+id); System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); System.out.println("GPA: "+gpa); }} }}
  35. 35. ตัว อย่า งโปรแกรมที่ไ ม่ไ ด้ใ ช้ห ลัก การของการสืบ ทอดpublic class GradStudent { public class GradStudent { private String id; private String id; private String name; private String name; private double gpa; private double gpa; private String thesisTitle; private String thesisTitle; private String supervisor; private String supervisor; public void setID(String ID) { public void setID(String ID) { id = ID; id = ID; }} public void setName(String n) { public void setName(String n) { name = n; name = n; }} public void setGPA(double GPA) { public void setGPA(double GPA) { gpa = GPA; gpa = GPA; }}
  36. 36. ตัว อย่า งโปรแกรมที่ไ ม่ไ ด้ใ ช้ห ลัก การของการสืบ ทอด public void setThesisTitle(String t) { public void setThesisTitle(String t) { thesisTitle = t; thesisTitle = t; }} public void setSupervisor(String s) { public void setSupervisor(String s) { supervisor = s; supervisor = s; }} public void showThesis() { public void showThesis() { System.out.println("ThesisTitle: "+thesisTitle); System.out.println("ThesisTitle: "+thesisTitle); System.out.println("Supervisor: "+supervisor); System.out.println("Supervisor: "+supervisor); }}}}
  37. 37. ตัว อย่า งโปรแกรมที่ใ ช้ห ลัก การ ของการสืบ ทอดpublic class GradStudent extends Student { public class GradStudent extends Student { private String thesisTitle; private String thesisTitle; private String supervisor; private String supervisor; public void setThesisTitle(String t) { public void setThesisTitle(String t) { thesisTitle = t; thesisTitle = t; }} public void setSupervisor(String s) { public void setSupervisor(String s) { supervisor = s; supervisor = s; }} public void showThesis() { public void showThesis() { System.out.println("ThesisTitle: "+thesisTitle); System.out.println("ThesisTitle: "+thesisTitle); System.out.println("Supervisor: "+supervisor); System.out.println("Supervisor: "+supervisor); }}}}
  38. 38. รูป แสดงหลัก การของการสืบ ทอด
  39. 39. ตัว อย่า งการสืบ ทอดทีไ ม่ถ ูก ต้อ ง ่ เราสามารถทีต รวจสอบหลัก การของการสืบ ทอด ่ ด้ว ยคำา ว่า is a public class Shirt { char size; float price; } public class Skirt extends Shirt { boolean long; }
  40. 40. ตัว อย่า งการสืบ ทอดที่ถ ูก ต้อ ง public class Clothing { char size; float price;}public class Shirt extends Clothing {}public class Skirt extends Clothing { boolean long;}
  41. 41. คีย ์เ วิร ์ด protected คุณ ลัก ษณะหรือ เมธอดของ superclass ทีม ี ่ modifier เป็น แบบ private จะทำา ให้ subclass ไม่ สามารถทีจ ะเรีย กใช้ไ ด้ ่ ภาษาจาวากำา หนดให้ม ี access modifier ทีช ื่อ ่ protected ซึง จะทำา ให้ subclass สามารถเรีย กใช้ ่ เมธอดหรือ คุณ ลัก ษณะของ superclass ได้ ตัว อย่า งเช่น protected String name;
  42. 42. คีย ์เ วิร ์ด protected ภาษาจาวากำา หนดให้ม ี access modifier ทีช ื่อ ่ protected ซึ่ง จะทำา ให้ค ลาสทีเ ป็น subclass ่ สามารถทีจ ะเรีย กใช้เ มธอดหรือ คุณ ลัก ษณะของ ่ superclass ได้ แม้ว ่า จะอยูต ่า งคลาสหรือ อยู่ต ่า ง ่ แพคเก็จ กัน ก็ต าม คลาสที่ อยู่ใ น คลาส คลาสที่ แพจ คลาส เดีย วกั เป็น su เก็จ ใดๆ น bclass เดีย วกั น public √ √ √ √
  43. 43. ตัว อย่า งโปรแกรม public class Student { public class Student { protected String id; protected String id; protected String name; protected String name; protected double gpa; protected double gpa; public void setDetails(String ID,String n,double GPA) { public void setDetails(String ID,String n,double GPA) { id = ID; id = ID; name = n; name = n; gpa = GPA; gpa = GPA; }} public void showDetails() { public void showDetails() { System.out.println("ID: "+id); System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); System.out.println("GPA: "+gpa); }}}}
  44. 44. คลาสที่ช ื่อ Object ภาษาจาวาได้ก ำา หนดให้ค ลาสใดๆ สามารถจะ สืบ ทอดคลาสอื่น ได้เ พีย งคลาสเดีย วเท่า นัน ้ คลาสทุก คลาสในภาษาจาวาถ้า ไม่ไ ด้ส ืบ ทอดจาก คลาสใดเลยจะถือ ว่า คลาสนั้น สืบ ทอดจากคลาสที่ ชื่อ Object ตัว อย่า งเช่น public class Student extends Object { ... } คลาสทีช ื่อ Object ่ จะมีเ มธอดทีส ำา คัญ คือ ่ public String toString() และ public boolean equals(Object o)
  45. 45. คีย ์เ วิร ์ด super super เป็น คีย เ วิร ์ด ทีใ ช้ใ นการอ้า งอิง ถึง ์ ่ superclass เพือ ทีจ ะเรีย กใช้ เมธอดหรือ ่ ่ constructor ของ superclass โดยมีร ูป แบบคำา สั่ง ดัง นี้ super.methodName([arguments]) ตัว อย่า งเช่น คลาส GradStudent อาจมีเ มธอดทีช อ่ ื่ showDetails() โดยมีค ำา สัง ทีเ รีย กใช้เ มธอด ่ ่ showDetails() ของคลาส Student และ showThesis() ของคลาส GradStudent public void showDetails() { super.showDetails(); showThesis(); }
  46. 46. การเขีย นโปรแกรมโดยใช้ห ลัก การของ การมีไ ด้ห ลายรูป แบบ การมีไ ด้ห ลายรูป แบบหมายถึง คุณ สมบัต ิข องออป เจ็ค ของคลาสทีต ่า งกัน สามารถตอบสนองต่อ ่ เมธอดเดีย วกัน ในวิธ ีก ารที่ต า งกัน ได้ ซึ่ง หมายถึง ่ การเขีย นเมธอดแบบ overridden และการใช้ Dynamic Binding การเขีย นเมธอดแบบ overridden มีข ้อ กำา หนด ดัง นี้ • จำา นวนและชนิด ข้อ มูล ของ argument จะต้อ งเหมือ น เดิม • ชนิด ข้อ มูล ของค่า ที่ส ่ง กลับ จะต้อ งเหมือ นเดิม • access modifier จะต้อ งไม่ม ีร ะดับ ตำ่า กว่า เดิม อาทิเ ช่น ถ้า เมธอดเดิม เป็น public จะไม่ส ามารถเปลี่ย นเป็น private ได้
  47. 47. Dynamic Binding ข้อ ดีข องการมีไ ด้ห ลายรูป แบบอีก ประการหนึง ่ คือ การทีส ามารถกำา หนดออปเจ็ค ได้ห ลายรูป แบบ ่ ตัว อย่า งเช่น จากรูป แบบ SuperClass obj; เราสามารถทีจ ะสร้า งออปเจ็ค ทีช อ obj ่ ่ ื่ ซึ่ง อาจเป็น ออปเจ็ค ของคลาสทีเ ป็น superclass หรือ ทีเ ป็น ่ ่ subclass ได้ โดยใช้ค ำา สัง ทีม ร ูป แบบดัง นี้ ่ ่ ี obj = new SuperClass(); หรือ obj = new SubClass(); ตัว อย่า งเช่น Student s; s = new GradStudent();
  48. 48. รูป แสดงการมีไ ด้ห ลายรูป แบบ ตัว อย่า ง Student s1 = new Student(); Student s1 = new GradStudent(); Student s1 = new PhDStudent();
  49. 49. เมธอดแบบ Overloaded ภาษาจาวาอนุญ าตให้ค ลาสใดๆมีเ มธอดทีม ช อ ่ ี ื่ เดีย วกัน มากกว่า หนึง เมธอดได้ แต่เ มธอดเหล่า นั้น ่ จะต้อ งมีจ ำา นวนหรือ ชนิด ข้อ มูล ของ argument ที่ ต่า งกัน ตัว อย่า งต่อ ไปนี้เ ป็น การเขีย นเมธอดแบบ overloaded ทีถ ูก ต้อ ง ่ public void setDetails(String ID, String n) { } public void setDetails(String ID, double GPA) { } public double setDetails(double GPA, String n) { } ตัว อย่า งต่อ ไปนี้เ ป็น การเขีย นเมธอดแบบ overloaded ทีไ ม่ถ ก ต้อ ง ่ ู
  50. 50. ตัว อย่า งโปรแกรมpublic class StudentV2 { public class StudentV2 { private String id; private String id; private String name; private String name; private double gpa; private double gpa; public void setDetails(String ID,String n) { public void setDetails(String ID,String n) { id = ID; id = ID; name = n; name = n; }} public void setDetails(String ID,String n,double GPA) { public void setDetails(String ID,String n,double GPA) { id = ID; id = ID; name = n; name = n; gpa = GPA; gpa = GPA; }}}}
  51. 51. เมธอดแบบ overridden การกำา หนดเมธอดแบบ overridden เป็น หลัก การ ทีส บ เนือ งมาจากหลัก การของการสืบ ทอด โดย ่ ื ่ คลาสทีเ ป็น subclass สามารถทีจ ะเขีย นเมธอด ่ ่ ของ superclass ขึ้น ใหม่ไ ด้ วิธ ีก ารนีเ รีย กว่า ้ เมธอดใน subclass เป็น เมธอดแบบ overridden การเขีย นเมธอดแบบ overridden มีข ้อ กำา หนด ดัง นี้ • จำา นวนและชนิด ข้อ มูล ของ argument จะต้อ งเหมือ น เดิม • ชนิด ข้อ มูล ของค่า ที่ส ่ง กลับ จะต้อ งเหมือ นเดิม • access modifier จะต้อ งไม่ม ีร ะดับ ตำ่า กว่า เดิม อาทิเ ช่น ถ้า เมธอดเดิม เป็น public จะไม่ส ามารถเปลี่ย นเป็น private ได้
  52. 52. ตัว อย่า ง โปรแกรมแสดงเมธอดแบบ overriddenclass Student { class Student { :: public void showDetails() { public void showDetails() { System.out.println("ID: "+id); System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); System.out.println("GPA: "+gpa); }}}}public class GradStudentV2 extends Student { public class GradStudentV2 extends Student { :: public void showDetails() { public void showDetails() { super.showDetails(); super.showDetails(); System.out.println("ThesisTitle: "+thesisTitle); System.out.println("ThesisTitle: "+thesisTitle); System.out.println("Supervisor: "+supervisor); System.out.println("Supervisor: "+supervisor); }}}}
  53. 53. Virtual Method Invocation โปรแกรมภาษาจาวาพิจ ารณาเรีย กใช้เ มธอดจาก ชนิด ของออปเจ็ค ทีส ร้า งขึ้น ตัว อย่า งเช่น คำา สัง ่ ่ Student s1 = new GradStudent(); s1.showDetails();เป็น คำา สั่ง ทีเ รีย กใช้เ มธอด showDetails() ของคลาส ่ GradStudent ไม่ใ ช่เ มธอดของคลาส Student แต่ค อมไพเลอร์ข องภาษาจาวาจะไม่อ นุญ าตให้ เรีย กใช้เ มธอดใดๆก็ต ามทีไ ม่ม ก ารประกาศอยูใ น ่ ี ่ เมธอดของ superclass ทีก ำา หนดไว้ ตัว อย่า งเช่น ่ Student s1 = new GradStudent(); s1.getSupervisor(); // Fail to compile
  54. 54. การส่ง ผ่า น argument ได้ห ลาย รูป แบบ ในกรณีท เ มธอดมี ี่ argument เป็น ข้อ มูล ชนิด คลาส เราสามารถทีจ ะส่ง ออปเจ็ค ของคลาสที่ ่ เป็น subclass ของคลาสนัน แทนได้ ตัว อย่า งเช่น ้ คำา สั่ง Student s1 = new Student(); PhDStudent s2 = new GradStudent(); เราสามารถทีจ ะเรีย กใช้เ มธอด printInfo(Student ่ s)ได้ห ลายรูป แบบดัง นี้ printInfo(s1) printInfo(s2) หรือ printInfo(new FullTimeStudent())
  55. 55. ตัว ดำา เนิน การ instanceof คีย เ วิร ์ด instanceof ์ เป็น ตัว ดำา เนิน การทีใ ช้ก ับ ออป ่ เจ็ค และคลาส เพือ ตรวจสอบว่า เป็น ออปเจ็ค ของ ่ คลาสนัน หรือ ไม่ โดย จะให้ผ ลลัพ ธ์เ ป็น ข้อ มูล ชนิด ้ boolean ถ้า ได้ผลลัพ ธ์เ ป็น true แสดงว่า ออปเจ็ค เป็น ของ คลาสนัน หรือ เป็น ของคลาสที่ค ลาสนัน สืบ ทอดมา ้ ้ ตัว อย่า งเช่น GradStudent s1 = new GradStudent(); (s1 instanceof GradStudent) → true (s1 instanceof Student) → true (s1 instanceof Object) → true (s1 instanceof String) → false
  56. 56. ตัว อย่า ง เมธอดที่แ สดงการใช้ instanceofpublic void printInfo(Student s) { public void printInfo(Student s) { if (s instanceof PhDStudent) { if (s instanceof PhDStudent) { System.out.println("PhD Student"); System.out.println("PhD Student"); } else if (s instanceof GradStudent) { } else if (s instanceof GradStudent) { System.out.println("Graduate Student"); System.out.println("Graduate Student"); } else if (s instanceof FullTimeStudent) { } else if (s instanceof FullTimeStudent) { System.out.println("Full-Time Student"); System.out.println("Full-Time Student"); } else if (s instanceof PartTimeStudent) { } else if (s instanceof PartTimeStudent) { System.out.println("Part-Time Student"); System.out.println("Part-Time Student"); } else if (s instanceof Student) { } else if (s instanceof Student) { System.out.println("Student"); System.out.println("Student"); }}
  57. 57. การ Casting ออปเจ็ค การ Casting ออปเจ็ค จะทำา ให้ต ัว แปร ของ subclass สามารถทีจ ะอ้า งอิง ถึง ออปเจ็ค ของ ่ subclass ผ่า นตัว แปรของ superclass ได้ อาทิ เช่น Student s1 = new GradStudent(); GradStudent s2 = (GradStudent)s1; ภาษาจาวาจะตรวจสอบชนิด ของออปเจ็ค ในช่ว ง ของ การรัน โปรแกรม ดัง นัน ตัว แปร ของ subclass ้ จะไม่ส ามารถอ้า งอิง ถึง ออปเจ็ค ของ superclass ได้ แม้ว ่า จะทำา การ casting ออปเจ็ค แล้ว ก็ต าม อาทิเ ช่น Student s1 = new Student(); GradStudent s2 = (GradStudent)s1;
  58. 58. การเรีย กใช้เ มธอดของออปเจ็ค การเรีย กใช้เ มธอดของออปเจ็ค ทีท ำา การ ่ casting ภาษาจาวาจะตรวจสอบชนิด ของออปเจ็ค ในช่ว ง ของการรัน โปรแกรม ว่า ออปเจ็ค ดัง กล่า วเป็น ออปเจ็ค ของคลาสใด และคลาสนั้น มีเ มธอดทีเ รีย ก่ ใช้ห รือ ไม่ หากไม่พ บก็จ ะเกิด ข้อ ผิด พลาดในช่ว ง ของการรัน โปรแกรม ตัว อย่า งเช่น Student s1 = new Student(); ((GradStudent) s1).getSupervisor(); // คอมไพล์ผ ่า นได้ แต่จ ะเกิด ข้อ ผิด พลาดในช่ว งของ การรัน โปรแกรม
  59. 59. ตัว อย่า งโปรแกรมแสดงการเรีย ก ใช้เ มธอด public class Student { public class Student { private String id; private String id; private String name; private String name; private double gpa; private double gpa; public String getID() { public String getID() { return id; return id; }} public String getName() { public String getName() { return name; return name; }} public double getGPA() { public double getGPA() { return gpa; return gpa; }} }}
  60. 60. ตัว อย่า งโปรแกรมแสดงการเรีย ก ใช้เ มธอด public class GradStudent extends Student { public class GradStudent extends Student { private String thesisTitle; private String thesisTitle; private String supervisor; private String supervisor; public String getThesisTitle() { public String getThesisTitle() { return thesisTitle; return thesisTitle; }} public String getSupervisor() { public String getSupervisor() { return supervisor; return supervisor; }} }}
  61. 61. ตัว อย่า งโปรแกรมแสดงการเรีย ก ใช้เ มธอด public class TestCallingMethods { public class TestCallingMethods { public static void main(String args[]) { public static void main(String args[]) { Student s1 = new GradStudent(); Student s1 = new GradStudent(); s1.getSupervisor(); s1.getSupervisor(); // compile error // compile error Student s2 = new Student(); Student s2 = new Student(); ((GradStudent) s2).getSupervisor(); ((GradStudent) s2).getSupervisor(); // runtime error // runtime error }} }}
  62. 62. Constructor constructor เป็น เมธอดทีม ช ื่อ เดีย วกับ ชื่อ คลาส ่ ี ซึ่ง มีร ูป แบบดัง นี้ [modifier] ClassName([arguments]) { [statements] } constructor เป็น เมธอดทีไ ม่ม ค ่า ทีจ ะส่ง กลับ แต่ ่ ี ่ ไม่ต ้อ งระบุค ีย เ วิร ์ด void ์ โดยทัว ไปคลาสทุก คลาสจะมี ่ default constructor ซึ่ง มีร ูป แบบดัง นี้ public ClassName() { } เราสาม ารถทีจ ะเขีย น ่ constructor ในคลาสใดๆ
  63. 63. ตัว อย่า งโปรแกรมแสดงการเรีย ก ใช้ constructorpublic class Student { public class Student { private String id; private String id; private String name; private String name; public Student(String ID,String n) { public Student(String ID,String n) { id = ID; id = ID; name = n; name = n; }}}}public class TestConstructor { public class TestConstructor { public static void main(String args[]) { public static void main(String args[]) { Student s = new Student(); Student s = new Student(); //illegal //illegal Student s = new Student("1122","Somchai"); Student s = new Student("1122","Somchai"); }} }}
  64. 64. คำา สั่ง new() มีข ั้น ตอนการทำา งานดัง นี้ • กำา หนดเนื้อ ที่ใ นหน่ว ยความจำา ให้ก ับ ออปเจ็ค • กำา หนดค่า เริ่ม ต้น ให้ก ับ คุณ ลัก ษณะของออปเจ็ค • กำา หนดค่า ของคุณ ลัก ษณะของออปเจ็ค ตามคำา สั่ง กำา หนดค่า ที่ป ระกาศไว้ • เรีย กใช้ constructor ตัว อย่า งเช่น public class MyDate { private int day = 1; private int month = 1; private int year = 2000; public MyDate(int d,int m,int y) { day = d; month = m; year = y; } }
  65. 65. รูป แสดงตัว อย่า งการทำา งานขั้น ตอนคำา สั่ง new คำา สั่ง MyDate d1 = new MyDate(16,8,1972); ขั้น ตอนที่ห นึ่ง ขั้น ตอนที่ส อง ขั้น ตอนที่ส าม ขั้น ตอนที่ส ี่
  66. 66. Constructor แบบ Overloaded เราสามารถทีจ ะสร้า ง ่ constructor แบบ overloaded ของคลาสได้ constructor แบบ overloaded จะมีจ ำา นวนหรือ ชนิด ข้อ มูล ทีแ ตกต่า งกัน ของ arguments ่ คำา สั่ง new ทีใ ช้ใ นการสร้า งออปเจ็ค จะเรีย กใช้ ่ constructor ทีม ี argument ทีส ง ผ่า นมาสอด ่ ่ ่ คล้อ งกับ constructor ทีก ำา หนด ่ ข้อ ดีข องการสร้า ง constructor แบบ overloaded คือ ทำา ให้เ ราสามารถทีส ร้า งออปเจ็ค ่ เริ่ม ต้น ได้ห ลายรูป แบบ เมธอดทีช ื่อ this() ่ เป็น การเรีย กใช้ constructor
  67. 67. ตัว อย่า งโปรแกรมแสดงconstructor แบบ overloadedpublic class Student { public class Student { private String id; private String id; private String name; private String name; private double gpa; private double gpa; public Student(String ID,String n) { public Student(String ID,String n) { id = ID; id = ID; name = n; name = n; }} public Student(String ID,String n,double GPA) { public Student(String ID,String n,double GPA) { id = ID; id = ID; name = n; name = n; gpa = GPA; gpa = GPA; }}}}
  68. 68. เมธอด this() เมธอดทีช ื่อ this() ่ เป็น การเรีย กใช้ constructor ของคลาสตัว เอง โดยจะต้อ งเป็น คำา สัง แรกสุด ทีอ ยู่ ่ ่ ใน constructor แบบ overloaded
  69. 69. ตัว อย่า งโปรแกรมแสดงการใช้ เมธอด this() public class Student { public class Student { private String id; private String id; private String name; private String name; private double gpa; private double gpa; public Student(String ID,String n) { public Student(String ID,String n) { id = ID; id = ID; name = n; name = n; }} public Student(String ID,String n,double GPA) { public Student(String ID,String n,double GPA) { this(ID,n); this(ID,n); gpa = GPA; gpa = GPA; }}}}
  70. 70. เมธอด super() constructorของ superclass จะไม่ส บ ทอด ื มายัง subclass เราสามารถทีจ ะเรีย กใช้ ่ constructor ของ superclass ได้โ ดยใช้เ มธอดทีช ื่อ ่ super() โดยส่ง ผ่า น argument ทีส อดคล้อ งกัน ่ เมธอด super() จะต้อ งเป็น คำา สัง แรกของ ่ constructor เช่น เดีย วกับ เมธอดทีช อ่ ื่ this() โดยทัว ไปการทำา งานของ ่ constructor ของ คลาสใดๆจะมีผ ลทำา ให้ม ก ารเรีย กใช้ ี constructor ของ superclass นัน ซึ่ง ถ้า ไม่ม ค ำา ้ ี สั่ง super() อยูใ นคำา สั่ง แรกของ constructor ของ ่
  71. 71. ตัว อย่า ง คลาสทีม ี constructor ใน ่ รูป แบบต่า งๆ public class Student { public class Student { protected String name; protected String name; public Student(String n) { public Student(String n) { name = n; name = n; }} }} public class GradStudent extends Student { public class GradStudent extends Student { public GradStudent(String n) { public GradStudent(String n) { super(n); super(n); }} public GradStudent() { public GradStudent() { this(" "); this(" "); }} }}
  72. 72. ขั้น ตอนการทำา งานของ constructor1. ถ้า มีค ำา สั่ง this() ใน constructor ก็จ ะเรีย กใช้ constructor แบบ overloaded ทีส อดคล้อ งกับ ่ คำา สัง this() แล้ว ข้า มไปขั้น ตอนที่ 4 ่2. เรีย กใช้ constructor ของ superclass ถ้า ไม่ม ี คำา สัง super() จะเรีย กใช้ constructor แบบ ่ default ยกเว้น คลาสทีช อ Object จะไม่ม ก าร ่ ื่ ี เรีย กใช้ constructor ของ superclass เนื่อ งจากคลาสทีช ื่อ Object จะไม่ม ี superclass ่3. เรีย กใช้ค ำา สั่ง กำา หนดค่า เริ่ม ต้น ของคุณ ลัก ษณะ ของออปเจ็ค4. เรีย กใช้ค ำา สั่ง ภายใน constructor ของคลาสที่
  73. 73. เมธอดของคลาสที่ช ื่อ Object คลาสทีช ื่อ Object ่ จะเป็น คลาสทีท ก ๆคลาสจะ ่ ุ สืบ ทอดมา เมธอดของคลาส Object ทีส ำา คัญ คือ ่ • toString() เป็น เมธอดที่ใ ช้ใ นการแปลงค่า ของออปเจ็ค ให้เ ป็น String ซึ่ง จะส่ง ค่า กลับ เป็น ข้อ มูล ชนิด คลาส String • equals(Object o) เป็น เมธอดที่ใ ช้ใ นการเปรีย บเทีย บค่า ของออปเจ็ค ซึ่ง จะส่ง ค่า กลับ เป็น ข้อ มูล ชนิด boolean
  74. 74. เมธอด toString() คลาสทีต ้อ งการจะแปลงข้อ มูล เป็น String ่ จะต้อ งมี เมธอดแบบ overriden ทีช อ toString() ่ ื่ เช่น คลาส Date ได้ก ำา หนดคำา สั่ง สำา หรับ เมธอด toString() ไว้แ ล้ว ดัง นัน การเรีย กใช้เ มธอด ้ System.out.println()โดยที่ argument เป็น ออป เจ็ค ของคลาส Date จะทำา ให้ม ก ารเรีย กใช้เ มธอด ี toString() ของคลาส Date โดยอัต โนมัต ิ ตัว อย่า ง เช่น คำา สัง ่ Date d = new Date(); System.out.println(d);
  75. 75. ตัว อย่า ง โปรแกรมแสดงเมธอด toString()public class Student { public class Student { private String name; private String name; public Student(String n) { public Student(String n) { name = n; name = n; }} public String toString() { public String toString() { return name; return name; }}}}public class TestToString { public class TestToString { public static void main(String args[]) { public static void main(String args[]) { Student s1 = new Student("Thana"); Student s1 = new Student("Thana"); System.out.println(s1); System.out.println(s1); }}}} ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแกรม ี่ Thana
  76. 76. เมธอด equals() คลาสทีต ้อ งการสร้า งเมธอดเพือ เปรีย บเทีย บ ค่า ขอ ่ ่ ง ออปเจ็ค ว่า เท่า กัน หรือ ไม่ จะต้อ ง มีเ มธอดแบบ overriden ทีช อ equals() ่ ื่
  77. 77. ตัว อย่า ง โปรแกรมแสดงเมธอด equals()class Student { class Student { private String name; private String name; public Student(String n) { public Student(String n) { name = n; name = n; }} public boolean equals(Object obj) { public boolean equals(Object obj) { if (obj.equals(name)) { return true;} if (obj.equals(name)) { return true;} else return false; else return false; }}}}public class TestEquals { public class TestEquals { public static void main(String args[]) { public static void main(String args[]) { Student s1 = new Student("Thana"); Student s1 = new Student("Thana"); Student s2 = new Student("Thana"); Student s2 = new Student("Thana"); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s2)); }}}} ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแกรม ี่ true
  78. 78. คลาสประเภท Wrapper คลาสประเภท Wrapper จะช่ว ยในการสร้า งออป เจ็ค ทีเ ก็บ ชนิด ข้อ มูล แบบพืน ฐานไว้ใ นคอลเล็ก ชั่น ่ ้ แบบ Heterogeneous คลาสประเภท ชนิด ข้อ มูล มีด ัง นี้ Wrapper คลาส boolean Boolean byte Byte short Short int Integer long Long float Float double Double char Character
  79. 79. ตัว อย่า งโปรแกรมแสดงการใช้ คลาสประเภท Wrapperpublic class ShowWrapper { public class ShowWrapper { public static void main(String args[]) { public static void main(String args[]) { Boolean b = new Boolean(true); Boolean b = new Boolean(true); Character c = new Character(A); Character c = new Character(A); Double d = new Double(1.234); Double d = new Double(1.234); System.out.println(b); System.out.println(b); System.out.println(c); System.out.println(c); System.out.println(d); System.out.println(d); }}}} true ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแกรม ี่ A 1.234
  80. 80. คุณ ลัก ษณะแบบ static คีย เ วิร ์ด static ์ สามารถทีจ ะใช้ก ับ คุณ ลัก ษณะและ ่ เมธอดของคลาสได้ คุณ ลัก ษณะของคลาสทีเ ป็น แบบ static ่ จะเป็น คุณ ลัก ษณะทีท ก ออปเจ็ค ของคลาสนี้ใ ช้ร ่ว มกัน ่ ุ คุณ ลัก ษณะของคลาสทีเ ป็น แบบ static ่ สามารถ ถูก เรีย กใช้จ ากชื่อ ของคลาสได้โ ดยไม่จ ำา เป็น ต้อ ง สร้า งออปเจ็ค อาทิเ ช่น • Student.counter
  81. 81. ตัว อย่า งโปรแกรมแสดงการใช้ คีย ์เ วิร ์ด static public class Student { public class Student { static int counter; static int counter; public Student() { public Student() { counter++; counter++; }} }} public class TestStatic { public class TestStatic { public static void main(String args[]) { public static void main(String args[]) { Student s1 = new Student(); Student s1 = new Student(); Student s2 = new Student(); Student s2 = new Student(); System.out.println(Student.counter); System.out.println(Student.counter); System.out.println(s1.counter); System.out.println(s1.counter); System.out.println(s2.counter); System.out.println(s2.counter); }} }} 2 ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแกรม ี่ 2 2
  82. 82. เมธอดแบบ static เมธอดโดยทัว ไปจะ มี ่ modifier เป็น แบบ non- static เมธอดทีม ี ่ modifier เป็น แบบ static จะสามารถ ถูก เรีย กใช้ง าน โดยใช้ช อ คลาสได้เ ลยไม่จ ำา เป็น ื่ ต้อ งสร้า งออปเจ็ก ของคลาสนั้น ขึ้น มาก่อ น ซึ่ง มีร ูป แบบดัง นี้ className.methodName(); ตัว อย่า งเช่น เมธอดทุก เมธอดในคลาส Math เป็น แบบ static ดัง นัน การเรีย กใช้ง านทุก เมธอดใน ้ คลาสสามารถทำา ได้ เช่น Math.sqrt(4); เมธอดแบบ static จะไม่ส ามารถเรีย กใช้เ มธอด
  83. 83. Static Initializer StaticInitializer คือ บล็อ กในคลาสใดๆทีอ ยู่ ่ นอกเมธอด และมีค ีย เ วิร ์ด static เพือ นิย ามให้เ ป็น ์ ่ บล็อ กแบบ static รูป แบบของ Static Initializer static { ... } คำา สั่ง ในบล็อ กแบบ static จะถูก เรีย กใช้เ พีย งครั้ง เดีย วเมือ JVM โหลดคลาสดัง กล่า วขึ้น มา ่ Initializer ใช้ใ นการ ดีบ ัก (debug) Static โปรแกรม หรือ ใช้ใ นกรณีท ต ้อ งการสร้า งออปเจ็ค ี่ ของคลาสขึ้น โดยอัต โนมัต ิ
  84. 84. ตัว อย่า งโปรแกรมแสดง Static Initializer public class TestStaticBlock { public class TestStaticBlock { static int x=5; static int x=5; static { static { x += 1; x += 1; }} public static void main(String args[]) { public static void main(String args[]) { System.out.println("x = "+x); System.out.println("x = "+x); }} static { static { x /= 2; x /= 2; }} }}ผลลัพ ธ์ท ไ ด้จ ากการรัน โปรแกรม 3 ี่ x =
  85. 85. คีย ์เ วิร ์ด final คีย เ วิร ์ด final ์ สามารถจะใช้ไ ด้ก บ คลาส ตัว แปร ั และเมธอด คลาสทีม ี ่ modifier เป็น final จะทำา ให้ค ลาสอื่น ไม่ส ามารถสืบ ทอดคลาสนี้ไ ด้ เมธอดทีม ี ่ modifier เป็น final คือ เมธอดที่จ ะไม่ สามารถมีเ มธอดแบบ overriden ได้ ตัว แปรทีม ี ่ modifier เป็น final คือ ค่า คงที่ ซึ่ง จะ ทำา ให้ส ามารถกำา หนดค่า ได้เ พีย งครั้ง เดีย วเท่า นัน ้
  86. 86. คลาสแบบ abstract คลาสทีม ี ่ modifier เป็น abstract หมายความว่า คลาสนัน ยัง เป็น คลาสทีไ ม่ส มบูร ณ์ โดยมีเ มธอด ้ ่ แบบ abstract ซึ่ง เป็น เมธอดทีย ัง ไม่ส มบูร ณ์อ ย่า ง ่ น้อ ยหนึง เมธอดอยู่ใ นคลาส ่ รูป แบบของเมธอดแบบ abstract [modifier] abstract return_type methodName([arguments]); คลาสแบบ abstract กำา หนดขึ้น มาเพือ ให้ค ลาสอื่น ่ สืบ ทอด โดยคลาสทีม าสืบ ทอดจะต้อ งกำา หนด ่ บล็อ กคำา สั่ง ในเมธอดทีย ง ไม่ส มบูร ณ์ ่ ั เราไม่ส ามารถสร้า งออปเจ็ค ของคลาสแบบ abstract ได้
  87. 87. ตัว อย่า งโปรแกรมแสดงคลาสแบบ abstract public abstract class Student { public abstract class Student { protected String id; protected String id; protected String name; protected String name; protected double gpa; protected double gpa; public void setID(String ID) { public void setID(String ID) { id = ID; id = ID; }} public void setName(String n) { public void setName(String n) { name = n; name = n; }} public void setGPA(double GPA) { public void setGPA(double GPA) { gpa = GPA; gpa = GPA; }} public abstract void showDetails(); public abstract void showDetails(); }}
  88. 88. ตัว อย่า งคลาสที่ส บ ทอดมาจาก ื คลาสแบบ abstractpublic class FullTimeStudent extends Student { public class FullTimeStudent extends Student { private int credit; private int credit; private final int MAX_YEAR = 4; private final int MAX_YEAR = 4; public FullTimeStudent(int c) { public FullTimeStudent(int c) { credit = c; credit = c; }} public void showDetails() { public void showDetails() { System.out.println("ID: "+id); System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); System.out.println("GPA: "+gpa); System.out.println("Credit: "+credit); System.out.println("Credit: "+credit); }}}}
  89. 89. อิน เตอร์เ ฟส อิน เตอร์เ ฟส (interface) มีล ัก ษณะคล้า ยกับ คลาส แบบ abstract แต่จ ะประกอบด้ว ยเมธอดทีย ง ไม่ ่ ั สมบูร ณ์เ ท่า นัน ้ รูป แบบของอิน เตอร์เ ฟส [modifier] interface InterfaceName { [methods();] } อิน เตอร์เ ฟสกำา หนดขึ้น มาเพือ ให้ค ลาสอื่น นำา ไป ่ ใช้ง านโดยใช้ค ีย เ วิร ์ด ์ implements โดยมีร ูป แบบ ดัง นี้ [modifier] class ClassName implements InterfaceName { [methods();]
  90. 90. อิน เตอร์เ ฟส อิน เตอร์เ ฟสจะเหมือ นกับ คลาสแบบ abstractตรงที่ เราจะไม่ส ามารถสร้า งออปเจ็ค ของอิน เตอร์เ ฟสได้ ประโยชน์ข องอิน เตอร์เ ฟสคือ • การกำา หนดรูป แบบของเมธอดต่า งๆที่ค ลาสอื่น ๆจะต้อ ง implements ไว้ล ่ว งหน้า ซึ่ง สามารถอาศัย หลัก การของ การมีไ ด้ห ลายรูป แบบมาเรีย กใช้เ มธอดเหล่า นั้น ได้จ าก คลาสที่ implements อิน เตอร์เ ฟส • ภาษาจาวากำา หนดให้ค ลาสใดๆสามารถสืบ ทอดคลาส อื่น ได้เ พีย งคลาสเดีย วเท่า นั้น แต่จ ะสามารถ implements อิน เตอร์เ ฟสได้ห ลายอิน เตอร์เ ฟส
  91. 91. ตัว อย่า งอิน เตอร์เ ฟส public interface Student { public interface Student { public void setID(String ID); public void setID(String ID); public void setName(String n); public void setName(String n); public void setGPA(double GPA); public void setGPA(double GPA); public void showDetails(); public void showDetails();}}
  92. 92. ตัว อย่า ง คลาสที่ implements อิน เตอร์เ ฟสpublic class PartTimeStudent implements Student { public class PartTimeStudent implements Student { private String id; private String id; private String name; private String name; private double gpa; private double gpa; private int credit; private int credit; private final int MAX_YEAR = 8; private final int MAX_YEAR = 8; public PartTimeStudent(int c) { public PartTimeStudent(int c) { credit = c; credit = c; }} public void setID(String ID) { public void setID(String ID) { id = ID; id = ID; }} public void setName(String n) { public void setName(String n) { name = n; name = n; }}
  93. 93. ตัว อย่า ง คลาสที่ implements อิน เตอร์เ ฟส public void setGPA(double GPA) { public void setGPA(double GPA) { gpa = GPA; gpa = GPA; }} public void showDetails() { public void showDetails() { System.out.println("ID: "+id); System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); System.out.println("GPA: "+gpa); System.out.println("Credit: "+credit); System.out.println("Credit: "+credit); }}}}
  94. 94. คลาสภายใน คลาสภายใน (Inner class) คือ คลาสทีป ระกาศ ่ อยูภ ายในคลาสอื่น ๆ ซึง บางครั้ง เรีย กว่า คลาส ่ ่ แบบซ้อ น (nested class) คลาสภายในอนุญ าตให้ป ระกาศคุณ ลัก ษณะหรือ เมธอดภายในคลาสอื่น ได้ คลาสภายในมีป ระโยชน์ใ นกรณีท ต ้อ งการจะจัด ี่ กลุ่ม ของคลาสทีต ้อ งทำา งานร่ว มกัน โดยต้อ งการ ่ ควบคุม ไม่ใ ห้ม ก ารเข้า ถึง โดยตรงจากคลาสอื่น ๆ ี และต้อ งการเรีย กใช้ค ุณ ลัก ษณะหรือ เมธอดของ คลาสทีอ ยู่ภ ายนอกได้โ ดยตรง ่ คลาสภายในทีใ ช้ใ นภาษาจาวาแบ่ง ออกเป็น ่ • คลาสภายในที่อ ยู่ภ ายในคลาสโดยตรง
  95. 95. คลาสภายในทีอ ยู่ภ ายในคลาส ่ กรณีน เ ป็น การประกาศคลาสภายในคลาสอื่น ที่ ี้ เรีย กว่า คลาสภายนอก (Outer class) คลาสภายในสามารถมี access modifier เป็น public, private, default หรือ protected ได้ การสร้า งออปเจ็ค ของคลาสภายในมีข อ แตกต่า ง ้ ดัง นี้ • การสร้า งออปเจ็ค ของคลาสภายในนอกคลาสภายนอก จะต้อ งทำา การสร้า งออปเจ็ค ของคลาสภายนอกก่อ น แล้ว จึง สร้า งออปเจ็ค ของคลาสภายในได้ • การสร้า งออปเจ็ค ภายในเมธอดที่อ ยู่ใ นคลาสภายนอก สามารถทำา ได้โ ดยตรง คลาสทีอ ยู่ภ ายในสามารถที่จ ะเรีย กใช้ค ุณ ลัก ษณะ ่
  96. 96. ตัว อย่า งโปรแกรมแสดงคลาสที่อ ยู่ ภายในคลาส public class Outer { public class Outer { public void method1() { public void method1() { Inner in1 = new Inner(); Inner in1 = new Inner(); in1.method2(); in1.method2(); }} public class Inner { public class Inner { public void method2() { public void method2() { System.out.println("Inner Demo"); System.out.println("Inner Demo"); }} }} }} public class InnerDemo { public class InnerDemo { public static void main(String args[]) { public static void main(String args[]) { Outer.Inner in2 = new Outer().new Inner(); Outer.Inner in2 = new Outer().new Inner(); in2.method2(); in2.method2(); }} }}

×