chapter 7...
TRANSCRIPT
08/03/60
1
Chapter 7ความรเพมเตมเกยวกบเมธอดและคลาส
More Methods and Classes
เนอหา● การควบการเขาถงสมาชกคลาส ● การสงคาออบเจกตใหเมธอด ● การคนคาออบเจกตจากเมธอด● โอเวอรโหลดเมธอด● โอเวอรโหลดคอนสตรคเตอร ● การเวยนกลบ● การใช static● การใช inner classes● การใช varargs
การเขาถงสมาชกคลาส (class member accessing)
• จาวามวตถประสงคหลกทเนนการรกษาขอมลและเมธอดทรวมเรยกวาสมาชกคลาสโดยการหอหม (encapsulation) โดยเฉพาะการหอหมขอมลแลวใหเขาถงผานเมธอด แตทงนจาวายงเปดชองใหมการเขาถงสมาชกของคลาสไดในกรณทไมตองการความปลอดภยทอาศยการหอหม
• เบองตนจาวาจะมการระบการเขาถงสมาชกได 2 แบบคอ–private หมายถงสมาชกนนสามารถเขาถงไดจากค าสงทอยในเมธอดทอยเฉพาะในคลาสนน
–public หมายถงสมาชกนนสามารถเขาถงไดจากค าสงทอยภายนอกคลาสนน
• จาวามกใช private กบสมาชกทเปนขอมล แลวใหค าสงทอยภายนอกอานหรอเขยนขอมลนนผานเมธอด ซงค าสงทอยภายนอกจะไดรบเฉพาะขอมลหรอการท างานตามทเมธอดของคลาสนนดดยไมทราบรายละเอยดการท างานทแทจรงของเมธอดซงเปรยบเสมอนกลองด า (black box)ทเราสามารถลวงขอมลหรอใสขอมลไดโดยไมรการท างานของเมธอดนนเหน
การเขาถงสมาชก (member access modifiers)
• publicหมายถงสมาชกนนสามารถเขาถงไดจากค าสงทภายในทกแหงในคลาสนนหรอจากเมธอดนอกคลาสนน
• private หมายถงสมาชกนนสามารถเขาถงไดจากสมาชกทอยเฉพาะในคลาสนน
• protected เปนการเขาถงสมาชกทมการสบทอดคณสมบตซงจะกลาวในบทหลง
• ถาไมมการระบการเขาถง จาวาจะก าหนดเปน public โดยปรยายแลว
• การระบการเขาถงตองอยหนาชนดของขอมล
ตวอยาง
08/03/60
2
การใช private และ public
ex
output
08/03/60
3
การสงผานออบเจกตใหเมธอด (pass object to method)
การผานพารามเตอรใหเมธอด
การ return ออบเจกต
08/03/60
4
Method Overloading
• เปนความสามารถของจาวาทสนบสนนแนวคด polymorphism โดยอนญาตใหเมธอดในคลาสใดๆสามารถมชอเหมอนกนท างานตางกน และตางกนทการประกาศจ านวนพารามเตอรไมเทากนหรอถาจ านวนพารามเตอรเทากนตองประกาศชนดขอมลของพารามเตอรไมเหมอนกน (ชอเมธอดเหมอนกนรายการพารามเตอรเหมอนกนตางกนเพยง ชนดคาสงกลบ (return types) ไมถอวาเปนการโอเวอรโหลดเมธอด)
output
08/03/60
5
โอเวอรโหลดคอนสตรคเตอรOverloading Constructors
• คอนสตรคเตอรสามารถท าโอเวอรโหลดไดเชนเดยวกบเมธอดทวไป เพอการสรางออบเจกตตรงวตถประสงคมากทสด
08/03/60
6
การเรยกซา (Recursion )• การทเมธอดเรยกใชตวเองเราจะเรยกวา การเรยกซ า
08/03/60
7
การใชคาสาคญ static• ปกตแลวเราจะเขาถงสมาชกของคลาสขณะทอยในสถานะออบเจกต แตอาจ
มบางครงทเราตองการเขาถงสมาชกเหลานนโดยอสสระจากสถานะออบเจกตหรอไมเขาถงโดยไมตองผานตวแปรคลาสทชไปยงออบเจกตนน
• จาวาไดเตรยมค าส าคญ static ไวเพอการน ท าใหสมาชกใดๆของคลาสสามารถเขาถงไดโดยไมสรางออบเจกตขนกอน เชน การประกาศเมธอด main() ใหเปน static เพราะตองถกเรยกเปนจดเรมตนท างาน
• ในการเรยกใชสมาชกทเปน static ใหขนตนดวยชอคลาสตามดวย ดอท แลวตามดวยชอสมาชกทประกาศเปน static เชน ถาตองการก านดคาของ count ทประกาศเปน static ของคลาส Time ใหมคาเทากบ 10
Time.count = 10 ;
output
ขอจากดของการใช static method
• static method จะสามารถเรยกเมธอดอน ทเปน static เทานน• static method จะสามารถเขาถง data (class variable) ท
เปน static เทานน• ไมสามารถใช this กบสมาชกทเปน static
08/03/60
8
Static Blocks
• ในบางครงคลาสตองการการก าหนดคาเรมตน (initialization) บางสงกอนทจะมการสรางออบเจกต เชน การขอตดตอไปยง server หรอการก าหนดคาเรมตนใหกบ static variable กอนท static method จะเรยกใช static variable เหลานน
• จาวาไดเตรยมการ static block เพอสงเหลานน
• static block จะถกเรยกท างานเปนอนดบเมอคลาสถกโหลดกอนทคลาสนนจะถกเรยกใหท างานอยางอน
Nested และInner Classes
• nested class หมายถงคลาสทประกาศอยภายในของคลาสอน
• สามารถสรางได 2 วธคอ แบบทตองใช static น าหนา และแบบทไมตองใช static น าหนา
• เบองตนเราจะพจารณาการใชงานในแบบทไมตองใช static น าหนา ซงเราจะเรยกวา inner class
• inner class จะสามารถเขาถงสมาชกใดๆ ของคลาสทหอหม (ชนนอก – outer class)ไดโดยตรง เหมอนกบสมาชกทไมไดเปน static คลาสทหอหมท าได
• บางครง inner class ถกใชในการสรางบรการ (service) บางอยางทคลาสหอหมตองการ
08/03/60
9
ใน ต.ย น Showbits class จะไมรจกถาอยภายนอก main() ถามการถกเรยกจากเมธอดอนภายนอก main() จะเกดขอผดพลาด
Varargs: Variable-Length Arguments
• เพอชวยแกปญหากรณทจ านวนคาของพารามเตอรไมแนนอน
Overloading Varargs Methods
08/03/60
10
กรณกากวมของ Varargs