Your SlideShare is downloading. ×
0
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์

7,240

Published on

แนะนำการเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์ โดยแนะนำการใช้เมธอด การใช้ constructor การเขียนโปรแกรมโดยใช้คุณลักษณะเด่นของโปรแกรมเชิงอ็อบเจกต์ อาทิเช่น การห่อหุ้ม การสืบทอด และการมีได้หลาย รูปแบบ …

แนะนำการเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์ โดยแนะนำการใช้เมธอด การใช้ constructor การเขียนโปรแกรมโดยใช้คุณลักษณะเด่นของโปรแกรมเชิงอ็อบเจกต์ อาทิเช่น การห่อหุ้ม การสืบทอด และการมีได้หลาย รูปแบบ เป็นต้น จากนั้นจะเป็นการแนะนำคลาสภายใน Generic Type และ Annotation

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
7,240
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
197
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. บทท 6 การพฒนาโปรแกรมภาษาจาวาเชงออบเจกต (Object Oriented Java Programming) ผศ.ธนศา เคร$อไวศยวรรณ คณะเทคโนโลย.สารสนเทศ สถาบนเทคโนโลย.พระจอมเกล5าเจ5าค6ณทหารลาดกระบง
  • 2. วตถประสงค อธบายเมธอด และการเรยกใช$เมธอด อธบายคยเวรดทใช$เป%น modifier ของเมธอด แนะน'าการเขยนโปรแกรมภาษาจาวาเชงออบเจกต อธบายคณลกษณะเด=นของโปรแกรมเชงออบเจกต อธบายความหมายของ Constructor  แนะนDาคลาสประเภท Wrapper  อธบายเมธอดของคลาสท.Fช$Fอ Object  ค.ยGเวรGดอ$Fนๆ ท.FสDาคญ  แนะนDาคลาสภายใน Generic และ คDาสFง Annotation
  • 3. รKปแบบการเรยกใช$เมธอด ร*ปแบบของคDาสFงท.ม.การเร.ยกใช5เมธอดเปLนดงน.M F obj.methodName([arguments]);  arguments อาจจะเปLนข$อม*ลค+าคงทหร-อตวแปร ชนดข5อมKลของ arguments ท.Fใช5ในการเร.ยกเมธอด จะต$องสอดคล$องกน กบชนดข5อมKลของ arguments ของเมธอด
  • 4. การเร.ยกใช5เมธอด เมธอดท.FกDาหนดขNMนในคลาสใดๆสามารถเร.ยกใช5งานได5สองรKปแบบค$อ • การเร.ยกใช5งานจากคลาสท.ต=างกน F • การเร.ยกใช5งานภายในคลาสเด.ยวกน การเร.ยกใช5เมธอดจากคลาสท.Fตางกน จะต5องม.การสร5างอPอบเจกตGของคลาส = ท.Fม.เมธอดท.FจะถKกเร.ยกใช5งานก=อน จNงจะสามารถเร.ยกใช5เมธอดได5 การเร.ยกใช5เมธอดภายในคลาสเด.ยวกน ในบางกรณ.จะสามารถทDาได5โดยไม= จDาเปLนต5องสร5างอPอบเจกตGของคลาสขNนมาก=อน และสามารถเร.ยกเมธอดได5 M ท6กเมธอด
  • 5. ตวอย+างโปรแกรมทม.การเร.ยกใช5เมธอดจากคลาสต=างกน public class NumericalClass { public void calculate() { double score = Math.random()*100; if (score >= 80) { System.out.println("Grade is A"); } else if (score >= 70) { System.out.println("Grade is B"); } else if (score >= 60){ System.out.println("Grade is C"); } else if (score >= 50){ System.out.println("Grade is D"); } else { System.out.println("Grade is F"); } } }
  • 6. ตวอย+างโปรแกรมทม.การเร.ยกใช5เมธอดจากคลาสต=างกน public class MyMain { public static void main(String args[]) { NumericalClass obj = new NumericalClass(); obj.calculate(); } }
  • 7. ตวอย+างโปรแกรมทม.การเร.ยกใช5เมธอดในคลาสเด.ยวกน public class NumericalClass { public void calculate() { double score = Math.random()*100; if (score >= 80) { System.out.println("Grade is A"); } else if (score >= 70) { System.out.println("Grade is B"); } else if (score >= 60){ System.out.println("Grade is C"); } else if (score >= 50){ System.out.println("Grade is D"); } else { System.out.println("Grade is F"); } } public void callMethod() { calculate(); } }
  • 8. การส=งผ+าน argument กรณทเมธอดม argument ทจะรบค+าเพ$อนDาไปใช5ในเมธอด อาทเช+น F public void setGPA(double GPA) { ... } ค'าสงท.เรยกใช5เมธอดน0 จะต$องส+ง argument ท.Fมชนดข5อมKลเปLน double F . ไปพร5อมกบช$Fอเมธอด เช=น setGPA(3.0);
  • 9. ตวอย+างโปรแกรม public class Student { String id; String name; double gpa; public void setGPA(double GPA) { gpa = GPA; } public double getGPA() { return gpa; } } -------------------------------------------------------------- public class MyMain2 { public static void main(String args[]) { Student s1 = new Student(); s1.setGPA(3.0); } }
  • 10. argument ของเมธอด argument ของเมธอดจะม.ชนดข5อมKลเปLนสองแบบตามชนดข5อมKลของ ตวแปรดงน.M • argument ท.Fม.ชนดข5อมKลแบบพ$Mนฐาน • argument ท.Fม.ชนดข5อมKลแบบอ5างอง ในกรณ.ของ argument ท.Fม.ชนดข5อมKลแบบพ$นฐาน เราสามารถท.Fจะส=งค=าคงท.F M ข5อมKล ตวแปร หร$อนพจนGให5กบ argument ได5 ตวอย=างเช=น • ค=าคงท.ข5อมKล เช=น F s1.setGPA(3.0); • ตวแปร เช=น double x = 3.0; s1.setGPA(x); • นพจนG เช=น s1.setGPA(3.0+0.05);
  • 11. argument ทมชนดข$อม*ลแบบอ$างอง เราจะต5องส=งอPอบเจกตGท.Fม.ชนดข5อมKลท.สอดคล5องไปเท=านMน F ยกเว5นกรณ.ท.F argument นMนม.ชนดข5อมKลเปLน String ซNFงในกรณ.นจะ .M สามารถส=งข5อมKลค=าคงท.ได5 F
  • 12. ตวอย+างโปรแกรมทม.การส=ง argument ท.เปLนอPอบ F เจกตG public class StudentV1 { String id; String name; MyDate dob; public void setDOB(MyDate d) { dob = d; } public MyDate getDOB() { return dob; } } ------------------------------------------------------------------------------------------ public class TestStudentV1 { public static void main(String args[]) { StudentV1 s1 = new StudentV1(); MyDate d1 = new MyDate(16, 12, 1980); s1.setDOB(d1); } }
  • 13. ตวอย+างโปรแกรมคลาส MyDate public class MyDate { private int day; private int month; private int year; public MyDate(int d, int m, int y) { day = d; month = m; year = y; } public void setDay(int d) { day = d; } public void setMonth(int m) { month = m; } public void setYear(int y) { year = y; } public void showDetails() { System.out.println("Date : " + day + "/" + month + "/" + year); } }
  • 14. ชนดข5อมKลและจDานวนของ argument ชนดข5อมKลของ argument ท.จะส=งผ=านไปยงเมธอดไม=จDาเปLนท.Fจะต5องเปLน F ชนดข5อมKลเด.ยวกน แต=ตองเปLนชนดข5อมKลท.Fสามารถแปลงข5อมKลให5กว5างขNMน 5 ได5โดยอตโนมต เมธอดใดๆอาจม. argument สDาหรบรบค=ามากกว=าหนNงตว แต=การเร.ยกใช5 F เมธอดเหล=าน.Mจะต5องส=ง argument ท.ม.ชนดข5อมKลท.Fสอดคล5องกนและม. F จDานวนเท=ากน
  • 15. ตวอย+างโปรแกรมทม.การส=ง argument จDานวนสองตว public class NumericalSample { public void calMax(int i, double d) { if (i > d) { System.out.println("Max = "+i); } else { System.out.println("Max = "+d); } } public static void main(String args[]) { NumericalSample obj = new NumericalSample(); obj.calMax(3,4.0); } }
  • 16. การเปล.Fยนแปลงค=าของ argument การส=ง argument ท.มชนดข$อม*ลเป%นแบบพ-นฐาน หากมการเปลยนแปลงค+า F 0 ของ argument ภายในเมธอดทถ*กเรยกใช$งาน จะไม+มผลท'าให$ค+าของ argument ทส+งไปเปลยนค+าไปด$วย การส=ง argument ท.มชนดข$อม*ลเป%นแบบอ$างอง จะเป%นการส+งต'าแหน+ง F อ$างองของออบเจกตไปให$กบเมธอดทถ*กเรยกใช$งาน ดงน0นการเปลยนแปลง ค+าของคณลกษณะของอPอบเจกตGจะมผลท'าให$ค+าของคณลกษณะของออบ เจกตทส+งไปเปลยนไปด$วย
  • 17. ตวอย+างโปรแกรมทแสดงการเปล.Fยนแปลงค=าของ argument public class ArgumentPassing { public void method1(int x) { x = 3; } public void method2(MyDate d) { d.setDay(1); d.setMonth(1); d.setYear(2002); } public int method3() { return 0; }
  • 18. ตวอย+างโปรแกรมทแสดงการเปล.Fยนแปลงค=าของ argument public static void main(String args[]) { int x = 4; ArgumentPassing obj = new ArgumentPassing(); MyDate d1 = new MyDate(16, 12, 1980); obj.method1(x); System.out.println("x = " + x); obj.method2(d1); d1.showDetails(); obj.method3(); } }
  • 19. การรบค=าท.Fสงกลบมาจากเมธอด = เมธอดใดๆของคลาสสามารถท.Fจะม.ค=าท.ส=งกลบมาได5 ซNFงชนดข5อมKลของค=าท.F F จะส=งกลบอาจเปLนชนดข5อมKลแบบพ$Mนฐาน หร$อเปLนชนดข5อมKลแบบอ5างอง เมธอดท.Fม.ค=าท.Fจะส=งกลบมาจะต5องม.คDาสFง return ซNFงจะระบ6ค=าท.Fสงกลบ = โดยม.รKปแบบดงน.M return value; คDาสFงท.เร.ยกใช5เมธอด อาจจะรบค=าท.FสงกลบมาเกPบไว5ในตวแปรหร$อเปLนตว F = ถKกดDาเนนการในนพจนG ตวอย=างเช=น double d = getGPA(); System.out.println("GPA:"+getGPA());
  • 20. modifier ของเมธอด modifier ของเมธอดประกอบด5วย • access modifier • static • abstract • synchronized • final access modifier ใช5เพ$อระบ6ระดบการเข5าถNง โดยม.ค.ยGเวรGดต=างๆดงน.M F • public • protected • private • default (ไม+ระบ ค.ยเวรGดใดๆ บ6 G )
  • 21. ตวอย+างโปรแกรมทแสดงการประกาศเมธอดและค6ณลกษณะ public class PrivateStudent { private String id; private String name; private double gpa; public void setDetails(String ID,String n,double GPA) { id = ID; name = n; gpa = GPA; } public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 22. ตวอย+างโปรแกรมทแสดงการประกาศเมธอดและค6ณลกษณะ public class TestPrivateStudent { public static void main(String args[]) { PrivateStudent ps = new PrivateStudent(); /* ps.id = "12345"; illegal ps.name = "Thana"; illegal ps.gpa = 3.25; illegal */ ps.setDetails("12345","Thana",3.25); ps.showDetails(); } }
  • 23. การเข.ยนโปรแกรมโดยใช5หลกการของการห=อห65ม ค6ณลกษณะเด=นของโปรแกรมเชงอPอบเจกตGม.อยK=สามอย=างค$อ การห=อห6ม 5 การส$บทอด และการม.ได5หลายรKปแบบ ข5อด.ของการห=อห65มประการหนNFงค$อการซ=อนเร5นข5อมKล หลกการห=อห65มของอPอบเจกตGทDาได5ดงน.M • กDาหนดค6ณลกษณะของอPอบเจกตGให5ม. modifier เปLน private เพ$Fอซ=อนไม=ให5อPอบ เจกตGอ$Fนๆเร.ยกใช5ได5 • กDาหนดเมธอดของอPอบเจกตGทตองการให5อPอบเจกตGอ$Fนๆเร.ยกใช5ให5ม. modifier เปLน .F 5 public
  • 24. ตวอย+างโปรแกรมท.Fไม=ได5ใช5หลกการของการห=อห65ม public class Student { String ID; String name; public double gpa; } -------------------------------------------------------------------------------------------------- public class NoEncapDemo { public static void main(String args[]) { Student s1 = new Student(); double temp = Double.parseDouble(args[0]); if ((temp<0) || (temp>4.00)) { System.out.println("Incorrect Format!"); } else { s1.gpa = temp; System.out.println("GPA: "+s1.gpa); } } }
  • 25. เมธอดแบบ setter เมธอดแบบ accessor แบ=งออกได5เปLนสองประเภทค$อ • เมธอดแบบ setter • เมธอดแบบ getter เมธอดแบบ setter จะใช5ในการกDาหนดค=าของค6ณลกษณะ โดยทFวไปช$Fอของเมธอดแบบ setter จะขNนต5นด5วยคDาว=า set แล5วตามด5วยช$Fอ M ของค6ณลกษณะ ซNFงม.รปแบบดงน.M K public void setAttributeName(dataType arg) { attributeName = arg; }
  • 26. ตวอย+างโปรแกรมท.Fใช5หลกการของการห=อห65ม public class Student { String ID; String name; private double gpa; public void setGPA(double GPA) { if ((GPA<0) || (GPA>4.00)) { System.out.println("Incorrect Format!"); } else { gpa = GPA; } } public double getGPA() { return gpa; } } -------------------------------------------------------------------------------------------------- public class EncapDemo { public static void main(String args[]) { Student s1 = new Student(); double temp = Double.parseDouble(args[0]); s1.setGPA(temp); System.out.println("GPA: "+s1.getGPA()); } }
  • 27. เมธอดแบบ getter เมธอดแบบ getter จะใช5ในการเร.ยกค=าของค6ณลกษณะ โดยทFวไปช$Fอของเมธอดแบบ getter จะขNMนต5นด5วยคDาว=า get แล5วตามด5วยช$Fอ ของค6ณลกษณะ ซNFงม.รปแบบดงน.M K public dataType getAttributeName() { return attributeName; }
  • 28. ตวอย+างโปรแกรมท.Fใช5หลกการของการห=อห65ม public class EncapStudent { private String id; private String name; private double gpa; public void setID(String ID) { id = ID; } public void setName(String n) { name = n; } public void setGPA(double GPA) { if ((GPA<0) || (GPA>4.00)) { System.out.println("Incorrect Format!"); } else { gpa = GPA; } }
  • 29. ตวอย+างโปรแกรมท.Fใช5หลกการของการห=อห65ม public String getID() { return id; } public String getName() { return name; } public double getGPA() { return gpa; } }
  • 30. ค.ยเวรGด this G ค.ยเวรGด this หมายถNงอPอบเจกตGของตวเอง เราสามารถท.จะเร.ยกใช5เมธอดหร$อค6ณลกษณะภายในคลาสได5โดยใช5 F ค.ยGเวรGด this ซNFงม.รปแบบดงน.M K this.methodName(); this.attributeName โดยทFวไปเราจะไม=ใช5ค.ยเวรGด this ในคDาสFง ยกเว5นในกรณ.ท.FจDาเปLน G
  • 31. ตวอย+างโปรแกรมการใช$ this public class ThisStudent { private String id; private String name; private double gpa; public void setDetails(String id,String name, double gpa) { this.id = id; this.name = name; this.gpa = gpa; } public void showDetails() { System.out.println("ID: "+this.id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 32. การเข.ยนโปรแกรมโดยใช5หลกการของการส$บทอด ข5อด.ของการส$บทอดค$อ การนDาคลาสท.Fม.อยK=แล5วมาใช5ใหม=โดยการเพFมเตม ค6ณลกษณะหร$อเมธอดในคลาสใหม= การพฒนาคลาสขNMนใหม=ทช$Fอ GradStudent .F สามารถท.จะเล$อกวธ.การได5 F สองแบบค$อ • สร5างคลาสขNMนมาใหม=โดยไม=อ5างองกบคลาสเดมท.Fชอ Student $F • สร5างคลาสท.สบทอดมาจากคลาสเดมท.ช$Fอ Student F $ F
  • 33. ตวอย+างโปรแกรมแสดงคลาสท.ช$Fอ Student F public class Student { private String id; private String name; private double gpa; public void setID(String ID) { id = ID; } public void setName(String n) { name = n; } public void setGPA(double GPA) { gpa = GPA; } public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 34. ตวอย+างโปรแกรมท.ไม=ได5ใช5หลกการของการส$บทอด F public class GradStudent { private String id; private String name; private double gpa; private String thesisTitle; private String supervisor; public void setID(String ID) { id = ID; } public void setName(String n) { name = n; } public void setGPA(double GPA) { gpa = GPA; }
  • 35. ตวอย+างโปรแกรมท.ไม=ได5ใช5หลกการของการส$บทอด F public void setThesisTitle(String t) { thesisTitle = t; } public void setSupervisor(String s) { supervisor = s; } public void showThesis() { System.out.println("ThesisTitle: "+thesisTitle); System.out.println("Supervisor: "+supervisor); } }
  • 36. ตวอย+างโปรแกรมท.ใช5หลกการของการส$บทอด F public class GradStudent extends Student { private String thesisTitle; private String supervisor; public void setThesisTitle(String t) { thesisTitle = t; } public void setSupervisor(String s) { supervisor = s; } public void showThesis() { System.out.println("ThesisTitle: "+thesisTitle); System.out.println("Supervisor: "+supervisor); } }
  • 37. รKปแสดงหลกการของการส$บทอด
  • 38. ตวอย=างการส$บทอดท.ไม=ถKกต5อง F เราสามารถท.ตรวจสอบหลกการของการส$บทอดด5วยคDาว=า is a F public class Shirt { char size; float price; } public class Skirt extends Shirt { boolean long; }
  • 39. ตวอย=างการส$บทอดท.Fถกต5อง K public class Clothing { char size; float price; } public class Shirt extends Clothing { } public class Skirt extends Clothing { boolean long; }
  • 40. ค.ยGเวรGด protected ค6ณลกษณะหร$อเมธอดของ superclass ท.Fม. modifier เปLนแบบ private จะทDาให5 subclass ไม=สามารถท.Fจะเร.ยกใช5ได5 ภาษาจาวากDาหนดให5ม. access modifier ท.ช$Fอ protected ซNFงจะทDาให5 F subclass สามารถเร.ยกใช5เมธอดหร$อค6ณลกษณะของ superclass ได5 ตวอย=างเช=น protected String name;
  • 41. ค.ยGเวรGด protected ภาษาจาวากDาหนดให5ม. access modifier ท.ช$Fอ protected ซNFงจะทDาให5คลาสท.F F เปLน subclass สามารถท.Fจะเร.ยกใช5เมธอดหร$อค6ณลกษณะของ superclass ได5 แม5ว=าจะอยKต=างคลาสหร$ออยKต=างแพคเกPจกนกPตาม = = คลาสท.อยK= F คลาสท.F คลาส modifier ในแพจเกPจ เปLนsubcla คลาสใดๆ เด.ยวกน เด.ยวกน ss √ √ √ √ public √ √ √ protected √ √
  • 42. ตวอย=างโปรแกรมท.Fใช5คยเวรGด protected . G public class Student { protected String id; protected String name; protected double gpa; public void setDetails(String ID,String n,double GPA) { id = ID; name = n; gpa = GPA; } public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 43. คลาสท.Fช$Fอ Object ภาษาจาวาได5กDาหนดให5คลาสใดๆ สามารถจะส$บทอดคลาสอ$Fนได5เพ.ยง คลาสเด.ยวเท=านMน คลาสท6กคลาสในภาษาจาวาถ5าไม=ได5สบทอดจากคลาสใดเลยจะถ$อว=าคลาส $ นMนส$บทอดจากคลาสท.ช$Fอ Object F ตวอย=างเช=น public class Student extends Object { ... } คลาสท.ช$Fอ Object จะม.เมธอดท.สDาคญค$อ F F public String toString() และ public boolean equals(Object o)
  • 44. ค.ยเวรGด super G  super เปLนค.ยGเวรGดท.ใช5ในการอ5างองถNง superclass เพ$อท.จะเร.ยกใช5 F F F เมธอดหร$อ constructor ของ superclass โดยม.รปแบบคDาสFงดงน.M K super.methodName([arguments]) ตวอย=างเช=น คลาส GradStudent อาจม.เมธอดท.ช$Fอ showDetails() F โดยม.คDาสFงท.Fเร.ยกใช5เมธอด showDetails() ของคลาส Student และ showThesis() ของคลาส GradStudent public void showDetails() { super.showDetails(); showThesis(); }
  • 45. ตวอย=างโปรแกรมท.Fใช5คยGเวรGด super . public class Student { private String id; private String name; private double gpa; public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } }
  • 46. ตวอย=างโปรแกรมท.Fใช5คยGเวรGด super . public class GradStudent extends Student { private String thesisTitle; private String supervisor; public void showDetails() { super.showDetails(); System.out.println("Thesis Title: "+ thesisTitle); System.out.println("Supervisor: "+supervisor); } }
  • 47. การเข.ยนโปรแกรมโดยใช5หลกการของการม.ได5หลายรKปแบบ การม.ได5หลายรKปแบบหมายถNง ค6ณสมบตของอPอบเจกตGของคลาสท.ต=างกน F สามารถตอบสนองต=อเมธอดเด.ยวกนในวธ.การท.Fตางกนได5 ซNFงหมายถNงการ = เข.ยนเมธอดแบบ overridden และการใช5 Dynamic Binding การเข.ยนเมธอดแบบ overridden ม.ข5อกDาหนดดงน.M • จDานวนและชนดข5อมKลของ argument จะต5องเหม$อนเดม • ชนดข5อมKลของค=าท.Fสงกลบจะต5องเหม$อนเดม = • access modifier จะต5องไม=ม.ระดบตFDากว=าเดมอาทเช=น ถ5าเมธอดเดมเปLน public จะไม=สามารถเปล.FยนเปLน private ได5
  • 48. Dynamic Binding ข5อด.ของการม.ได5หลายรKปแบบอ.กประการหนNง ค$อการท.FสามารถกDาหนดอP F อบเจกตGได5หลายรKปแบบ ตวอย=างเช=น จากรKปแบบ SuperClass obj; เราสามารถท.จะสร5างอPอบเจกตGท.Fช$Fอ obj ซNFงอาจเปLนอPอบเจกตGของคลาสท.F F เปLน superclass หร$อท.เปLน subclass ได5 โดยใช5คDาสFงท.Fม.รKปแบบดงน.M F obj = new SuperClass(); หร$อ obj = new SubClass(); ตวอย=างเช=น Student s; s = new GradStudent();
  • 49. รKปแสดงการม.ได5หลายรKปแบบ ตวอย=าง Student s1 = new Student(); Student s1 = new GradStudent(); Student s1 = new PhDStudent();
  • 50. เมธอดแบบ Overloaded ภาษาจาวาอน6ญาตให5คลาสใดๆม.เมธอดท.Fม.ช$Fอเด.ยวกนมากกว=าหนNงเมธอด F ได5 แต=เมธอดเหล=านMนจะต5องม.จDานวนหร$อชนดข5อมKลของ argument ท.ต=าง F กน ตวอย=างต=อไปน.เปLนการเข.ยนเมธอดแบบ M overloaded ท.ถKกต5อง F public void setDetails(String ID, String n) { } public void setDetails(String ID, double GPA) { } public double setDetails(double GPA, String n) { } ตวอย=างต=อไปน.เปLนการเข.ยนเมธอดแบบ M overloaded ท.ไม=ถKกต5อง F public void setDetails(String ID,double GPA) { } public void setDetails(String n,double GPA) { }
  • 51. ตวอย+างโปรแกรมแสดงเมธอดแบบ overloaded public class StudentV2 { private String id; private String name; private double gpa; public void setDetails(String ID,String n) { id = ID; name = n; } public void setDetails(String ID,String n,double GPA) { id = ID; name = n; gpa = GPA; } }
  • 52. เมธอดแบบ overridden การกDาหนดเมธอดแบบ overridden เปLนหลกการท.Fสบเน$องมาจากหลกการ $ F ของการส$บทอด โดยคลาสท.FเปLน subclass สามารถท.จะเข.ยนเมธอดของ F superclass ขNMนใหม=ได5 วธ.การน.เร.ยกว=า เมธอดใน subclass เปLนเมธอดแบบ M overridden การเข.ยนเมธอดแบบ overridden ม.ขอกDาหนดดงน.M 5 • จDานวนและชนดข5อมKลของ argument จะต5องเหม$อนเดม • ชนดข5อมKลของค=าท.Fสงกลบจะต5องเหม$อนเดม = • access modifier จะต5องไม=ม.ระดบตFDากว=าเดมอาทเช=น ถ5าเมธอดเดมเปLน public จะไม=สามารถเปล.FยนเปLน private ได5
  • 53. ตวอย+างโปรแกรมแสดงเมธอดแบบ overridden class Student { : public void showDetails() { System.out.println("ID: "+id); System.out.println("Name: "+name); System.out.println("GPA: "+gpa); } } public class GradStudentV2 extends Student { : public void showDetails() { super.showDetails(); System.out.println("ThesisTitle: "+thesisTitle); System.out.println("Supervisor: "+supervisor); } }
  • 54. Virtual Method Invocation โปรแกรมภาษาจาวาพจารณาเร.ยกใช5เมธอดจากชนดของอPอบเจกตGท.Fสร5าง ขNMน ตวอย=างเช=น คDาสFง Student s1 = new GradStudent(); s1.showDetails(); เปLนคDาสFงท.Fเร.ยกใช5เมธอด showDetails() ของคลาส GradStudent ไม=ใช= เมธอดของคลาส Student แต=คอมไพเลอรGของภาษาจาวาจะไม=อน6ญาตให5เร.ยกใช5เมธอดใดๆกPตามท.F ไม=ม.การประกาศอยKในเมธอดของ superclass ท.กDาหนดไว5 ตวอย=างเช=น = F Student s1 = new GradStudent(); s1.getSupervisor(); // Fail to compile
  • 55. การส+งผ+าน argument ได5หลายรKปแบบ ในกรณ.ท.Fเมธอดม. argument เปLนข5อมKลชนดคลาส เราสามารถท.Fจะส=ง อP อบเจกตGของคลาสท.FเปLน subclass ของคลาสนMนแทนได5 ตวอย=างเช=น คDาสFง Student s1 = new Student(); PhDStudent s2 = new GradStudent(); เราสามารถท.จะเร.ยกใช5เมธอด printInfo(Student s)ได5หลายรKปแบบ F ดงน.M printInfo(s1) printInfo(s2)  หร$อ printInfo(new FullTimeStudent())
  • 56. ตวด'าเนนการ instanceof คยเวรด instanceof เป%นตวด'าเนนการทใช$กบออบเจกตและคลาส เพ-อ ตรวจสอบว+าเป%นออบเจกตของคลาสนMนหร$อไม= โดยจะให$ผลลพธเป%นข$อม*ล ชนด boolean ถ5าได5ผลลพธเป%น true แสดงว=าอPอบเจกตGเป%นของคลาสน0นหร-อเปLนของ คลาสทคลาสนMนส-บทอดมา ตวอย+างเช+น GradStudent s1 = new GradStudent(); (s1 instanceof GradStudent) → true (s1 instanceof Student) → true (s1 instanceof Object) → true (s1 instanceof String) → Compilation fail!
  • 57. ตวอย+างเมธอดท.แสดงการใช5 instanceof F public void printInfo(Student s) { if (s instanceof PhDStudent) { System.out.println("PhD Student"); } else if (s instanceof GradStudent) { System.out.println("Graduate Student"); } else if (s instanceof FullTimeStudent) { System.out.println("Full-Time Student"); } else if (s instanceof PartTimeStudent) { System.out.println("Part-Time Student"); } else if (s instanceof Student) { System.out.println("Student"); } }
  • 58. การ Casting ออบเจกต การ Casting ออบเจกตจะทDาให5ตวแปรของ subclass สามารถท.Fจะอ$างองถ4ง ออบเจกตของ subclass ผ=านตวแปรของ superclass ได5 อาทเช=น Student s1 = new GradStudent(); GradStudent s2 = (GradStudent)s1; ภาษาจาวาจะตรวจสอบชนดของออบเจกตในช+วงของการรนโปรแกรม ดงน0น ตวแปรของ subclass จะไม=สามารถอ$างองถ4งออบเจกตของ superclass ได5 แม5ว=าจะทDาการ casting ออบเจกตแล5วกPตาม อาทเช=น Student s1 = new Student(); GradStudent s2 = (GradStudent)s1; // คอมไพลGผ=านได5 แต=จะเกดข5อผดพลาดในช=วงของการรนโปรแกรม
  • 59. การเรยกใช$เมธอดของออบเจกต การเร.ยกใช5เมธอดของอPอบเจกตGท.FทDาการ casting ภาษาจาวาจะตรวจสอบ ชนดของอPอบเจกตGในช=วงของการรนโปรแกรม ว=าอPอบเจกตGดงกล=าวเปLน อP อบเจกตGของคลาสใด และคลาสนMนม.เมธอดท.Fเร.ยกใช5หร$อไม= หากไม=พบกPจะ เกดข5อผดพลาดในช=วงของการรนโปรแกรม ตวอย=างเช=น Student s1 = new Student(); ((GradStudent) s1).getSupervisor(); // คอมไพลGผ=านได5 แต=จะเกดข5อผดพลาดในช=วงของการรนโปรแกรม
  • 60. ตวอย+างโปรแกรมแสดงการเร.ยกใช5เมธอด public class Student { private String id; private String name; private double gpa; public String getID() { return id; } public String getName() { return name; } public double getGPA() { return gpa; } }
  • 61. ตวอย+างโปรแกรมแสดงการเร.ยกใช5เมธอด public class GradStudent extends Student { private String thesisTitle; private String supervisor; public String getThesisTitle() { return thesisTitle; } public String getSupervisor() { return supervisor; } }
  • 62. ตวอย+างโปรแกรมแสดงการเร.ยกใช5เมธอด public class TestCallingMethods { public static void main(String args[]) { Student s1 = new GradStudent(); s1.getSupervisor(); // compile error Student s2 = new Student(); ((GradStudent) s2).getSupervisor(); // runtime error } }
  • 63. Constructor constructor เป%นเมธอดทมช-อเดยวกบช-อคลาส ซNงม.รปแบบดงน.M F K [modifier] ClassName([arguments]) { [statements] } constructor เปLนเมธอดท.ไม=ม.ค=าท.จะส=งกลบแต=ไม=ตองระบ6ค.ยGเวรGด void F F 5 โดยทวไปคลาสทกคลาสจะม default constructor ซNงม.รปแบบดงน.M F K public ClassName() { } เราสามารถทจะเขยน constructor ในคลาสใดๆขNMนมากได$ default constructor จะหายไปเม-อมการเขยน constructor ข40นใหม+
  • 64. ตวอย+างโปรแกรมแสดงการเร.ยกใช5 constructor public class Student { private String id; private String name; public Student(String ID,String n) { id = ID; name = n; } } public class TestConstructor { public static void main(String args[]) { Student s = new Student(); //illegal Student s = new Student("1122","Somchai"); } }
  • 65. ค'าสง new() มข0นตอนการท'างานดงน0 • ก'าหนดเน-0อทในหน+วยความจ'าให$กบออบเจกต • ก'าหนดค+าเรมต$นให$กบคณลกษณะของออบเจกต • กDาหนดค=าของค6ณลกษณะของอPอบเจกตGตามคDาสFงกDาหนดค=าท.Fประกาศไว5 • เรยกใช$ 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; } }
  • 66. รKปแสดงตวอย=างการทDางานขMนตอนคDาสFง new คDาสFง MyDate d1 = new MyDate(16,8,1972); ขMนตอนท.หนNFง F ขMนตอนท.สอง F ขMนตอนท.สาม F ขMนตอนท.ส.F F
  • 67. Constructor แบบ Overloaded เราสามารถท.จะสร5าง constructor แบบ overloaded ของคลาสได$ F constructor แบบ overloaded จะมจ'านวนหร-อชนดข$อม*ลทแตกต+างกนของ arguments ค'าสง new ท.ใช5ในการสร5างอPอบเจกตGจะเร.ยกใช5 constructor ท.ม. argument F F ท.Fสงผ=านมาสอดคล5องกบ constructor ท.กDาหนด = F ข5อด.ของการสร5าง constructor แบบ overloaded ค$อทDาให5เราสามารถท.F สร5างอPอบเจกตGเรFมต5นได5หลายรKปแบบ เมธอดท.Fช$Fอ this() เปLนการเร.ยกใช5 constructor ของคลาสตวเอง โดยจะ ต5องเปLนคDาสFงแรกส6ดท.FอยK=ใน constructor แบบ overloaded
  • 68. ตวอย+างโปรแกรมแสดง constructor แบบ overloaded public class Student { private String id; private String name; private double gpa; public Student(String ID,String n) { id = ID; name = n; } public Student(String ID,String n,double GPA) { id = ID; name = n; gpa = GPA; } }
  • 69. เมธอด this() เมธอดท.Fช$Fอ this() เปLนการเร.ยกใช5 constructor ของคลาสตวเอง โดยจะ ต5องเปLนคDาสFงแรกส6ดท.FอยK=ใน constructor แบบ overloaded
  • 70. ตวอย+างโปรแกรมแสดงการใช5เมธอด this() public class Student { private String id; private String name; private double gpa; public Student(String ID,String n) { id = ID; name = n; } public Student(String ID,String n,double GPA) { this(ID,n); gpa = GPA; } }
  • 71. เมธอด super() constructor ของ superclass จะไม+สบทอดมายง - subclass เราสามารถท.จะเร.ยกใช5 constructor ของ superclass ได5โดยใช5เมธอดท.Fช$Fอ F super() โดยส=งผ=าน argument ท.Fสอดคล5องกน เมธอด super() จะต5องเปLนคDาสFงแรกของ constructor เช=นเด.ยวกบ เมธอดท.Fช$Fอ this() โดยทFวไปการทDางานของ constructor ของคลาสใดๆจะม.ผลทDาให5ม.การ เร.ยกใช5 constructor ของ superclass นMน ซNงถ5าไม=ม.คDาสFง super() อยKใน F = คDาสFงแรกของ constructor ของคลาสนMน ภาษาจาวาจะเร.ยกใช5 constructor แบบ default ของ superclass นMนโดยอตโนมต
  • 72. ตวอย+างการเร.ยกใช5 constructor ของ superclass public class StudentV1 { protected String name; public StudentV1(String n) { name = n; } } ------------------------------------------------------ public class GradStudentV1 extends StudentV1 { public GradStudentV1(String n) { name = n; /* compile error should be super(n) */ } }
  • 73. ข0นตอนการท'างานของ constructor • ถ5าม.คDาสFง this() ใน constructor กPจะเร.ยกใช5 constructor แบบ overloaded ท.สอดคล5องกบคDาสFง this() แล5วข5ามไปขMนตอนท.F 3 F • เร.ยกใช5 constructor ของ superclass ถ5าไม=ม.คDาสFง super() จะเร.ยกใช5 constructor แบบ default ยกเว5นคลาสท.Fช$Fอ Object จะไม=ม.การเร.ยกใช5 constructor ของ superclass เน$Fองจากคลาสท.Fช$Fอ Object จะไม=ม. superclass • เร.ยกใช5คDาสFงกDาหนดค=าเรFมต5นของค6ณลกษณะของอPอบเจกตG • เร.ยกใช5คDาสFงภายใน constructor ของคลาสท.ใช5นน F M
  • 74. ตวอย+างคลาสท.Fม. constructor ในรKปแบบต=างๆ public class Student { protected String name; public Student(String n) { name = n; } } public class GradStudent extends Student { public GradStudent(String n) { super(n); } public GradStudent() { this(" "); } }
  • 75. เมธอดของคลาสท.ช$Fอ Object F คลาสท.ช$Fอ Object จะเปLนคลาสท.ท6กๆคลาสจะส$บทอดมา F F เมธอดของคลาส Object ทส'าคญค-อ • toString() เป%นเมธอดทใช$ในการแปลงค+าของออบเจกตให$เป%น String ซNFงจะส=งค=ากลบเปLน ข5อมKลชนดคลาส String • equals(Object o) เปLนเมธอดท.Fใช5ในการเปร.ยบเท.ยบค=าของอPอบเจกตG ซNFงจะส=งค=ากลบเปLนข5อมKลชนด boolean
  • 76. เมธอด toString() คลาสทต$องการจะแปลงข$อม*ลเป%น String จะต5องม.เมธอดแบบ overriden ท.Fช$Fอ toString() เช=นคลาส Date ได5กDาหนดคDาสFงสDาหรบเมธอด toString() ไว5แล5ว ดง นMนการเร.ยกใช5เมธอด System.out.println()โดยท.F argument เปLนอP อบเจกตGของคลาส Date จะทDาให5ม.การเร.ยกใช5เมธอด toString() ของ คลาส Date โดยอตโนมต ตวอย=างเช=น คDาสFง Date d = new Date(); System.out.println(d);
  • 77. ตวอย+างโปรแกรมแสดงเมธอด toString() public class Student { private String name; public Student(String n) { name = n; } public String toString() { return name; } } public class TestToString { public static void main(String args[]) { Student s1 = new Student("Thana"); System.out.println(s1); } } ผลลพธGท.Fได5จากการรนโปรแกรม Thana
  • 78. เมธอด equals() คลาสทต$องการสร$างเมธอดเพ-อเปรยบเทยบค=าของอPอบเจกตGว+าเท+ากนหร-อ ไม+ จะต$องม.เมธอดแบบ overriden ท.ช$Fอ F equals()
  • 79. ตวอย+างโปรแกรมแสดงเมธอด equals() class Student { private String name; public Student(String n) { name = n; } public boolean equals(Object obj) { if (obj.equals(name)) { return true;} else return false; } } public class TestEquals { public static void main(String args[]) { Student s1 = new Student("Thana"); Student s2 = new Student("Thana"); System.out.println(s1.equals(s2)); } } ผลลพธGท.Fได5จากการรนโปรแกรม true
  • 80. คลาสประเภท Wrapper คลาสประเภท Wrapper จะช=วยในการสร5างอPอบเจกตGท.FเกPบชนดข5อมKลแบบ พ$นฐานไว5ในคอลเลPกชFนแบบ Heterogeneous M คลาสประเภท Wrapper ม.ดงน.M
  • 81. ตวอย=างโปรแกรมแสดงการใช5คลาสประเภท Wrapper public class ShowWrapper { public static void main(String args[]) { Boolean b = new Boolean(true); Character c = new Character('A'); Double d = new Double(1.234); System.out.println(b); System.out.println(c); System.out.println(d); } } true ผลลพธGทได5จากการรนโปรแกรม .F A 1.234
  • 82. Autoboxing และ Auto-unboxing  คDาสFง Autoboxing ค$อการแปลงจากชนดข5อมKลพ$นฐานเช=น intไปเปLนคลาส M ประเภท Wrapper เช=น Integer คDาสFง Auto-unboxing ค$อการแปลงจากคลาสประเภท Wrapper เช=น Byte ไปเปLนชนดข5อมKลพ$นฐานเช=น byte M
  • 83. ตวอย=างการใช5คDาสFง Auto-boxing/Auto-unboxing public class ShowWrapper { public static void main(String []args) { Integer myInt = 1; // int into Integer System.out.println(myInt); int i = myInt + 3; // mix Integer and int System.out.println(i); } } ผลลพธGทได5จากการรนโปรแกรม .F 1 4
  • 84. ค6ณลกษณะแบบ static คยเวรด static สามารถทจะใช$กบค6ณลกษณะและเมธอดของคลาสได$ ค6ณลกษณะของคลาสทเป%นแบบ static จะเป%นค6ณลกษณะททกออบ M เจกตของคลาสน.ใช$ร+วมกน ค6ณลกษณะของคลาสทเป%นแบบ static สามารถถKกเรยกใช$จากช-อของ คลาสได$โดยไม+จ'าเป%นต$องสร$างออบเจกต อาทเช+น • Student.counter
  • 85. ตวอย+างโปรแกรมแสดงการใช5ค.ยเวรGด static G public class Student { static int counter; public Student() { counter++; } } public class TestStatic { public static void main(String args[]) { Student s1 = new Student(); Student s2 = new Student(); System.out.println(Student.counter); System.out.println(s1.counter); System.out.println(s2.counter); } } 2 2 ผลลพธGท.Fได5จากการรนโปรแกรม 2
  • 86. เมธอดแบบ static เมธอดโดยทวไปจะม. modifier เป%นแบบ non-static เมธอดทม modifier เป%นแบบ static จะสามารถถKกเรยกใช$งาน โดยใช$ชอ - คลาสได5เลยไม+จ'าเป%นต$องสร$างออปเจกของคลาสนMนข40นมาก+อน ซNFงม.รปแบบ K ดงน0 className.methodName(); ตวอย+างเช+น เมธอดทกเมธอดในคลาส Math เป%นแบบ static ดงน0นการ เร.ยกใช5งานท6กเมธอดในคลาสสามารถทDาได5 เช=น Math.sqrt(4); เมธอดแบบ static จะไม+สามารถเรยกใช$เมธอดหร-อตวแปรของอPอบเจกตG ได$โดยตรง
  • 87. Static Initializer Static Initializer ค-อบลอกในคลาสใดๆทอย*+นอกเมธอด และมคยเวรด static เพ-อนยามให$เป%นบลอกแบบ static รKปแบบของ Static Initializer static { ... } ค'าสงในบลอกแบบ static จะถ*กเรยกใช$เพยงคร0งเดยวเม-อ JVM โหลด คลาสดงกล+าวข40นมา Static Initializer ใช$ในการด.บก (debug) โปรแกรม หร-อใช5ในกรณ.ทต5องกา .F รสร5างอPอบเจกตGของคลาสขNMนโดยอตโนมต เราสามารถท.จะกDาหนดบลPอกแบบ static ได5มากกว=าหนNงบลPอก โดยการ F F ทDางานจะถKกเร.ยงจากบนลงล=าง
  • 88. ตวอย+างโปรแกรมแสดง Static Initializer public class TestStaticBlock { static int x=5; static { x += 1; } public static void main(String args[]) { System.out.println("x = "+x); } static { x /= 2; } } ผลลพธGท.Fได5จากการรนโปรแกรม x = 3
  • 89. คยเวรด final คยเวรด final สามารถจะใช$ได$กบคลาส ตวแปร และเมธอด คลาสทม modifier เป%น final จะทDาให5คลาสอ$Fนไม+สามารถส-บทอดคลาสน.M ได$ เมธอดทม modifier เป%น final ค$อเมธอดท.Fจะไม=สามารถม.เมธอดแบบ overriden ได5 ตวแปรทม modifier เป%น final ค-อค+าคงท ซNFงจะทDาให5สามารถกDาหนดค=า ได5เพ.ยงครMงเด.ยวเท=านMน
  • 90. คลาสภายใน คลาสภายใน (Inner class) ค$อคลาสท.FประกาศอยK=ภายในคลาสอ$Fนๆ ซNFงบาง ครMงเร.ยกว=าคลาสแบบซ5อน (nested class) คลาสภายในอน6ญาตให5ประกาศค6ณลกษณะหร$อเมธอดภายในคลาสอ$Fนได5 คลาสภายในม.ประโยชนGในกรณ.ท.Fตองการจะจดกล6=มของคลาสท.FตองทDางาน 5 5 ร=วมกน โดยต5องการควบค6มไม=ให5ม.การเข5าถNงโดยตรงจากคลาสอ$Fนๆ และ ต5องการเร.ยกใช5ค6ณลกษณะหร$อเมธอดของคลาสท.อยK=ภายนอกได5โดยตรง F คลาสภายในทใช$ในภาษาจาวาแบ+งออกเป%น • คลาสภายในทอย*+ภายในคลาสโดยตรง • คลาสภายในทอย*+ภายในเมธอด
  • 91. คลาสภายในท.อยKภายในคลาส F = กรณ.นเปLนการประกาศคลาสภายในคลาสอ$Fนท.Fเร.ยกว=า คลาสภายนอก .M (Outer class) คลาสภายในสามารถม access modifier เป%น public, private, default หร$อ protected ได5 การสร5างอPอบเจกตGของคลาสภายในม.ขอแตกต=างดงน.M 5 • การสร5างอPอบเจกตGของคลาสภายในนอกคลาสภายนอก จะต5องทDาการสร5างอPอบ เจกตGของคลาสภายนอกก=อน แล5วจNงสร5างอPอบเจกตGของคลาสภายในได5 • การสร5างอPอบเจกตGภายในเมธอดท.อยK=ในคลาสภายนอกสามารถทDาได5โดยตรง F คลาสท.อยK=ภายในสามารถท.Fจะเร.ยกใช5ค6ณลกษณะและเมธอดของคลาส F ภายนอกได5
  • 92. ตวอย+างโปรแกรมแสดงคลาสทอย*+ภายในคลาส public class Outer { public void method1() { Inner in1 = new Inner(); in1.method2(); } public class Inner { public void method2() { System.out.println("Inner Demo"); } } } public class InnerDemo { public static void main(String args[]) { Outer.Inner in2 = new Outer().new Inner(); in2.method2(); } }
  • 93. คลาสภายในท.อยK=ภายในเมธอด F คลาสภายในประเภทน.Mจะม. access modifier เปLน default เราจะไม=สามารถท.Fจะสร5างอPอบเจกตGของคลาสภายในประเภทน.นอกเมธอด M ท.Fประกาศคลาสได5 คลาสประเภทน.จะสามารถเร.ยกใช5ตวแปรภายในของเมธอดได5ในกรณ.ท.F M ตวแปรนMนประกาศเปLน final เท=านMน ส=วนตวแปรท.เปLนค6ณลกษณะของ F คลาสหร$อค6ณลกษณะของอPอบเจกตG สามารถท.จะเร.ยกใช5ได5เช=นเด.ยวกบ F คลาสภายในท.FอยK=ภายในคลาส
  • 94. ค6ณสมบตท.FสDาคญอ$Fนๆของคลาสภายใน คลาสภายในอาจเปLนคลาสแบบ abstract หร$ออนเตอรGเฟสได5 คลาสภายในท.FอยK=ภายในคลาสภายนอกโดยตรง ถ5าม. modifier เปLน static จะกลายเปLนคลาสปกต และสามารถสร5างอPอบเจกตGโดยการเร.ยกช$Fอของ คลาสภายนอกได5ดงน.M Outer.Inner in3 = Outer.new Inner(); คลาสภายในไม=สามารถท.Fประกาศให5ม.ค6ณลกษณะหร$อเมธอดเปLนแบบ static ได5เว5นแต=คลาสภายในจะเปLนคลาสแบบ static คลาสภายในสามารถท.Fจะใช5ตวแปรท.FเปLนค6ณลกษณะของคลาสหร$อ ค6ณลกษณะของอPอบเจกตGของคลาสภายนอกได5
  • 95. ตวอย+างโปรแกรมแสดงคลาสท.อยK=ภายในเมธอด F public class MOuter { private int a = 1; public void method(final int b) { final int c = 2; int d = 3; class Inner { private void iMethod() { System.out.println("a = "+a); System.out.println("b = "+b); System.out.println("c = "+c); System.out.println("d = "+d); //illegal } } } }
  • 96. Generic Types เราสามารถท.จะประกาศคลาสหร$ออนเตอรGเฟสใดๆให5ม.ชนดข5อมKลเปLนแบบ F ทFวไป (Generic Type) public class ClassName(TypeVariable) ตวอย=างเช=น – public class Box<T> จะระบ6ชนดข5อมKลแบบเจาะจงได5ตอนท.Fสร5างอPอบเจกตG ตวอย=างเช=น – Box<Integer> integerBox = new Box<Integer>();
  • 97. ตวอย+างแสดงคลาสท.ใช5 Generic Type F public class Box<T> { private T t; public void add(T t) { this.t = t; } public T get() { return t; } } ----------------------------------------------------------- public class BoxDemo { public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); integerBox.add(new Integer(10)); Integer someInteger = integerBox.get(); // no cast! System.out.println(someInteger); } }
  • 98. เมธอดแบบ Generic เราสามารถท.จะใช5 Generic Type กบเมธอดหร$อ constructor ใดๆกPได5 F [modifier] <TypeVariable> return_type methodName(TypeVaraible varName) { [method_body] } โดยท.F – TypeVariable ค$อช$Fอของตวแปรชนดข5อมKล – varName ค$อช$Fอ argument
  • 99. ตวอย+างแสดงคลาสท.ประกาศเมธอดแบบ Generic F public class BoxMethod { public <U> void inspect(U u) { System.out.println("U: " + u.getClass().getName()); } } ------------------------------------------------------- public class BoxMethodDemo { public static void main(String[] args) { BoxMethod box = new BoxMethod(); box.inspect(3.2); } }
  • 100. Annotation  ภาษาจาวาม.คDาสFง annotation (เคร$Fองหมาย @) ซNFงจะให5ข5อมKลเก.Fยวกบโปรแกรม โดยท.Fจะ ไม=ม.ผลโดยตรงต=อคDาสFงใดๆ  annotation จะถKกใช5งานในกรณ.ต=างๆ ดงน.M – เปLนข5อมKลสDาหรบคอมไพเลอรG เพ$Fอตรวจจบข5อผดพลาดหร$อ warning ของโปรแกรม – ช=วยในกระบวนการขMนตอนการคอมไพลGและตดตMง (deployment) ทMงน.MซอฟตGแวรGในการ คอมไพลG สามารถท.จะประมวลผลข5อมKล annotation ในการสร5างโค5ดท.FเปLนไฟลG XML ได5 F – ช=วยในกระบวนการขMนตอน runtime ทMงน.Mจาก annotation บางคDาสFงจะสามารถตว รสอบได5ในช=วง runtime
  • 101. Annotation  คDาสFง annotation @ มกจะถKกประกาศเปLนคDาสFงแรก ตามด5วยช$Fอของ annotation ซNFง อาจม. element ท.Fม. named หร$อ unnamed valued  ตวอย=างเช=น @Author( name = "Benjamin Franklin", date = "3/27/2003" ) class MyClass() { } หร$อ @SuppressWarnings(value = "unchecked") void myMethod() { }
  • 102. Annotation Document @interface ClassPreamble { String author(); String date(); int currentRevision() default 1; String lastModified() default "N/A"; String lastModifiedBy() default "N/A"; String[] reviewers(); // Note use of array } @ClassPreamble ( author = "John Doe", date = "3/17/2002", currentRevision = 6, lastModified = "4/12/2004", lastModifiedBy = "Jane Doe", reviewers = {"Alice", "Bob", "Cindy"} // Note array notation ) public class Generation3List extends Generation2List { // class code goes here }
  • 103. Annotation ท.Fใช5โดยคอมไพเลอรG  ภาษาจาวาได5กDาหนด annotation สDาหรบคอมไพเลอรGไว5สามคDาสFงค$อ @Depreacted, @Override และ @Suppresswarnings  @Deprecated เราจะใช5 annotationน.M ในกรณ.ท.Fต5องการระบ6ว=าคDาสFงเช=นคลาส เมธอด หร$อค6ณลกษณะใด เปLนคDาสFงท.Fไม=ควรจะใช5แล5ว เพ$Fอให5คอมไพเลอรGส=งคDาสFง warning ออกมาในช=วง การคอมไพลG  @Override เราจะใช5 annotationน.Mเพ$FอจะบอกคอมไพเลอรGว=า element น.M override คDาสFง element ของ superclass  @SuppressWarnings เราจะใช5 annotationน.Mเพ$FอบอกคอมไพเลอรGไม=ตองแสดงคDาสFง 5 warning ท.Fอาจ ปรากฎขNนจากการใช5คDาสFงท.Fตามมาน.ในช=วงการคอมไพลGโปรแกรม M M
  • 104. สร6ปเน$อหาของบท M เมธอดท.FกDาหนดขNนในคลาสใดๆสามารถเร.ยกใช5งานได5สองรKปแบบค$อ การ M เร.ยกใช5งานจากคลาสท.Fตางกน และการเร.ยกใช5งานภายในคลาสเด.ยวกน = เมธอดท.FกDาหนดขNนในคลาสอาจม. argument ท.Fรบค=าเพ$FอนDาไปใช5ในเมธอด M เมธอดใดๆของคลาสสามารถท.Fจะม.ค=าท.Fสงกลบมาได5 ทMงน.การประกาศ = M เมธอดจะต5องระบ6ชนดข5อมKลของค=าท.Fจะส=งกลบ เมธอดสามารถแบ=งเปLนเมธอดของอPอบเจกตG (หร$อเร.ยกว=าเมธอดแบบ non- static) และเมธอดของคลาส (หร$อเร.ยกว=าเมธอดแบบ static) เมธอดของคลาสใดท.Fม. modifier เปLนแบบ static จะทDาให5สามารถถKก เร.ยกใช5งาน โดยใช5ช$FอของคลาสนMนได5เลย เมธอดแบบ overloaded ค$อ ม.เมธอดท.ม.ช$Fอเด.ยวกนแต=จะม.จDานวนหร$อชนด F ข5อมKลของ argument ท.Fต=างกน
  • 105. สร6ปเน$อหาของบท M โดยทFวไป ค6ณลกษณะของคลาสจะม. modifier เปLนแบบ private ทMงน.เพ$อ M F ปoองกนการเข5าถNงจากคลาสอ$Fน โดยทFวไป เมธอดของคลาสจะม. modifier เปLนแบบ public ทMงน.เพ$อให5 M F เมธอดจากคลาสอ$Fนเร.ยกใช5ได5 ช$Fอของเมธอดท.Fเก.Fยวข5องกบค6ณลกษณะของคลาส นยมใช5 setXxx สDาหรบ เมธอดท.Fม.ไว5เพ$FอกDาหนดค=าให5กบค6ณลกษณะ xxx และใช5 getXxx สDาหรบ เมธอดท.Fจะส=งค=ากลบเปLนค6ณลกษณะ xxx  ค.ยGเวรGด protected จะทDาให5คลาสท.FเปLน subclass สามารถท.Fจะอ5างองถNงค6ณลกษณะหร$อ เมธอดของ superclass ได5
  • 106. สร6ปเน$อหาของบท M คลาสท6กคลาสในภาษาจาวาถ5าไม=ได5สบทอดจากคลาสใดเลยจะถ$อว=าคลาส $ นMนส$บทอดจากคลาสท.ช$Fอ Object F เมธอดแบบ overriden จะเปLนการเข.ยนเมธอดของ superclass ขNMนใหม=  super เปLนค.ยเวรGดท.Fใช5ในการอ5างองถNง superclass G การม.ได5หลายรKปแบบหมายถNง – การท.เราสามารถท.จะสร5างหร$ออ5างถNงอPอบเจกตGของคลาสท.ส$บทอดกนได5 F F F หลายรKปแบบ – การท.เราสามารถท.จะอ5างถNงเมธอดช$Fอเด.ยวกนได5หลายรKปแบบ F F เมธอดแบบ overloaded หมายถNงเมธอดท.ม.ช$Fอเด.ยวกนมากกว=าหนNงเมธอด F F โดยม.จDานวนหร$อชนดของ argument ท.Fแตกต=างกน
  • 107. สร6ปเน$อหาของบท M เมธอดแบบ overridden หมายถNงการท.F subclass สร5างเมธอดท.ม.อยKแล5วใน F = superclass ขNMนใหม= โดยใช5ช$Fอ argument และชนดข5อมKลของค=าท.ส=งกลบ F ของเมธอดเหม$อนเดม ค.ยGเวรGด instanceof เปLนตวดDาเนนการท.Fใช5กบอPอบเจกตGและคลาส เพ$อตรวจ F สอบว=าอPอบเจกตGใดๆ เปLน อPอบเจกตGของคลาสท.ระบ6หร$อไม= F การ casting อPอบเจกตG ทDาให5เราสามารถจะกDาหนดอPอบเจกตGของคลาสท.F เปLน superclass ให5กบตวแปรท.FกDาหนดเปLนคลาสท.FเปLน subclass ได5 Constructor หมายถNง เมธอดท.ม.ช$Fอเด.ยวกนกบช$Fอคลาส แต=จะไม=ม.การส=ง F ค=ากลบและจะไม=ม.การใส=ค.ยเวรGด void โดยคลาสท6กคลาสจะม. default G constructor มาให5อยK=แล5ว แต=เราสามารถท.FจะกDาหนด constructor ขNMนใหม= เองได5
  • 108. สร6ปเน$อหาของบท M Constructor แบบ overloaded หมายถNง constructor ท.Fม.จDานวนหร$อชนด ของ argument ท.Fแตกต=างกน เมธอดท.Fช$Fอ this() เปLนการเร.ยกใช5 constructor ของคลาสตวเอง Constructor แบบ default ของคลาสท.FเปLน superclass จะถKกเร.ยกใช5โดย อตโนมตท6กครMงท.ม.การสร5าง อPอบเจกตGของคลาส F คลาสท.ช$Fอ Object ม.เมธอดท.FสDาคญอยKสองเมธอดค$อเมธอด toString() และ F = เมธอด equals() Auto-boxing / Auto-unboxing ค$อการแปลงค=าระหว=างชนกข5อมKลพ$นฐาน M กบคลาสประเภท Wrapper ท.Fสอดคล5องกนโดยอตโนมต เมธอดแบบ static สามารถถKกเร.ยกใช5จากช$Fอของคลาสได5โดยไม=จDาเปLน ต5องสร5างอPอบเจกตG
  • 109. สร6ปเน$อหาของบท M คลาสแบบ final ค$อคลาสท.ไม=สามารถส$บทอดได5 F คลาสภายในหมายถNงคลาสท.อยK=ภายในคลาส หร$อคลาสท.FอยKภายในเมธอด F = Generic Type สามารถท.จะทDาให5เราประกาศคลาสหร$ออนเตอรGเฟสใดๆให5ม. F ชนดข5อมKลเปLนแบบทFวไป (Generic Type) แล5วค=อยระบ6ชนดข5อมKลแบบ เจาะจงตอนท.สร5างอPอบเจกตGได5 F เมธอดแบบ Generic ค$ดเมธอดท.Fม. argument ท.เปLน Generic Type F Annotation จะให5ข5อมKลเก.Fยวกบโปรแกรม โดยท.Fจะไม=ม.ผลโดยตรงต=อคDาสFง ใดๆของ code ท.ทDาการบนทNก F

×