Upload
hop-sweeney
View
20
Download
3
Embed Size (px)
DESCRIPTION
บทที่ 11. Inheritance และ Encapsulation. ความหมายของ Inheritance. การสร้างหรือพัฒนาคลาสใหม่จากคลาสเดิมที่มีอยู่แล้ว คลาสใหม่จะนำแอ ตทริบิวต์ และเมธอดของคลาสเดิมมาใช้ เป็นการถ่ายทอดคุณสมบัติจากคลาสหนึ่งสู่อีกคลาสหนึ่งนั่นเอง เรียกคลาสที่ถ่ายทอดคุณสมบัติของคลาสว่า คลาสแม่ ( SuperClass ) - PowerPoint PPT Presentation
Citation preview
บทท�� 11
Inheritance และ Encapsulation
ความหมายของ Inheritance การสร�างหร�อพั�ฒนาคลาสใหม�จากคลาสเดิ มท��ม�
อย!�แล�ว คลาสใหม�จะน"าแอตทร บ วต$และเมธอดิของคลาส
เดิ มมาใช้� เป็(นการถ่�ายทอดิค*ณสมบ�ต จากคลาสหน,�งส!�อ�ก
คลาสหน,�งน��นเอง เร�ยกคลาสท��ถ่�ายทอดิค*ณสมบ�ต ของคลาสว�า คลาสแม� (SuperClass) เร�ยกคลาสท��ไดิ�ร�บการถ่�ายทอดิว�า คลาสล!ก (Subclass)
คลาสล!กสามารถ่พั�ฒนาต�อเต มแอตทร บ วต$และเมธอดิของต�วเองไดิ�
คลาสล!กสามารถ่ป็ร�บป็ร*งแก�ไขแอตทร บ วต$และเมธอดิเดิ มท��ไดิ�ร�บมาจากคลาสแม�ไดิ�
2
ต�วอย�างการสร�างคลาสแม� - คลาสล!ก
3
คลาส Car เป็(นคลาสรถ่ท��วไป็ท��ม�สามารถ่ สตาร$ทเคร��องไดิ� – start() เป็ล��ยนเก�ยร$ไดิ� – ChangeGear() ดิ�บเคร��องไดิ� – stop()
คลาส Bus เป็(นคลาสรถ่บ�สท��ม�สามารถ่ สตาร$ทเคร��องไดิ� เป็ล��ยนเก�ยร$ไดิ� ดิ�บเคร��องไดิ� ม�ผู้!�โดิยสาร - Seat
ดิ�งน�0น คลาส Car เป็(นคลาสแม� และคลาส Bus เป็(นคลาสล!กท��ส�บทอดิค*ณสมบ�ต จากคลาส Car
ร!�จ�กก�บคลาสแม� (SuperClass)
4
เป็(นคลาสท��เป็(นต�นแบบของแอตทร บ วต$และเมธอดิ
อน*ญาตให�คลาสอ��นส�บทอดิแอตทร บ วต$และเมธอดิไป็ไดิ�ท�0งหมดิ ยกเว�นแอตทร บ วต$ท��ม�ระดิ�บการเข�าถ่,งเป็(น private และเมธอดิท��เป็(น constructor
ระดิ�บการเข�าถ่,งแอตทร บ วต$และเมธอดิของคลาสแม�เป็(น protected ม�ร!ป็แบบการใช้�งาน ดิ�งน�0[modifier] class SuperClassName {
[AttributeName] [MethodName]}
โดิยท�� modifier เป็(นค�ย$เว ร$ดิท��ก"าหนดิค*ณสมบ�ต การเข�าถ่,งคลาสSuperClassName เป็(นช้��อคลาสแม�AttributeName เป็(นส�วนของการป็ระกาศแอตทร บ วต$MethodName เป็(นส�วนของการป็ระกาศเมธอดิ
ร!�จ�กก�บคลาสล!ก (SubClass) เป็(นคลาสท��ส�บทอดิแอตทร บ วต$และเมธอดิจาก
คลาสแม� คลาสล!กสามารถ่เร�ยกใช้�แอตทร บ วต$และเมธอดิ
จากคลาสแม�ไดิ� และคลาสล!กม�แอตทร บ วต$และเมธอดิเพั �มเต มเป็(น
ของต�วเองไดิ� การระบ*ความส�มพั�นธ$ให�คลาสเป็(นคลาสล!กต�องใช้�
ค�ย$เว ร$ดิ extends ม�ร!ป็แบบการใช้�งาน ดิ�งน�0[modifier] class SubClassName extends SuperClassName {
[AttributeName] [MethodName]
}
5
โดิยท�� modifier เป็(นค�ย$เว ร$ดิท��ก"าหนดิค*ณสมบ�ต การเข�าถ่,งคลาสSubClassName เป็(นช้��อคลาสล!กSuperClassName เป็(นช้��อคลาสแม�AttributeName เป็(นส�วนของการป็ระกาศแอตทร บ วต$MethodName เป็(นส�วนของการป็ระกาศเมธอดิ
โป็รแกรมก"าหนดิค�าแรงรายว�นให�ก�บคลาสแม�-คลาสล!กimport java.util.Scanner; class employee { protected float rate=300.0f;} class daily_emp extends employee { } class monthly_emp extends employee { }
6
public class SupSubClassTest { public static void main(String[] args) { float r; employee emp1 = new employee(); System.out.println("\"Employee\"\nRate
per Day=" +emp1.rate+"BAHT"); Scanner scan = new Scanner(System.in); System.out.print("\"Daily Employee\"\
nEnter Rate = "); r = scan.nextFloat(); daily_emp emp2 = new daily_emp(); emp2.rate = r; System.out.println("Rate per Day = " +
emp2.rate + " BAHT"); System.out.print("\"Monthly Employee\"\
nEnter Salary : "); r = scan.nextFloat(); monthly_emp emp3 = new
monthly_emp(); emp3.rate = r; System.out.println("Rate per Day = " +
emp3.rate/30 +" BAHT"); }}
ร!�จ�กก�บ Overriding method
Overriding เป็(นการเป็ล��ยนแป็ลงการท"างานของเมธอดิในคลาสล!กท��ส�บทอดิมาจากคลาสแม�
เมธอดิในคลาสล!กจะม�ช้��อเมธอดิ, ช้น ดิข�อม!ลท��ค�นค�า, จ"านวนและช้น ดิข�อม!ลของอาร$ก วเมนต$ท��เหม�อนก�บคลาสแม�
สามารถ่พั�ฒนาเมธอดิให�ม�การท"างานในเร��องเดิ�ยวก�น แต�แตกต�างก�นในรายละเอ�ยดิของการท"างาน เช้�น การค"านวณหาพั�0นท��ของร!ป็ทรงเรขาคณ ตต�าง ๆ ท��ม�
ส!ตรค"านวณท��แตกต�างก�น การค"านวณค�าแรงของพัน�กงานท��ม�ว ธ�ค"านวณท��แตก
ต�างก�นไป็ในแต�ละต"าแหน�ง
7
โป็รแกรมค"านวณค�าแรงรวม Override เมธอดิ calOT()import java.util.Scanner; class employee { protected float rate = 300.0f, work=10.0f; int hour; float calOT() { return hour*rate/work; }} class daily_emp extends employee { } class monthly_emp extends employee { float pay, bonus; float calOT() { pay = hour*rate/work; if (hour>100) pay += bonus; return pay; }}
8
public class InheritOverRideTest { public static void main(String[] args) { Scanner scan = new
Scanner(System.in); System.out.print("Enter total OT hour :
"); employee emp1 = new employee(); emp1.hour = scan.nextInt(); System.out.println("\"Employee\"\
nTotal OT Pay = (" + emp1.rate + " * " + emp1.hour + ") = " +
emp1.calOT() + " BAHT"); daily_emp emp2 = new daily_emp(); emp2.hour = emp1.hour; System.out.print("\"Daily Employee\"\
nRate per Day = "); emp2.rate = scan.nextFloat(); System.out.println("Total OT Pay = ("
+ emp2.rate + " * " + emp2.hour + ") = " +
emp2.calOT()+ " BAHT"); monthly_emp emp3 = new
monthly_emp(); emp3.hour = emp1.hour; System.out.print("\"Monthly
Employee\"\nEnter Salary = "); emp3.rate = scan.nextFloat()/30; System.out.print("Enter Bonus = "); emp3.bonus = scan.nextFloat(); System.out.println("Total OT Pay = ("
+ emp3.rate + " * " + emp3.hour + ") + " + emp3.bonus + "
= " + emp3.calOT() + " BAHT"); }}
constructor เป็(นส �งท��คลาสล!กไม�สามารถ่ส�บทอดิจากคลาสแม�ไดิ�
แต�คลาสล!กสามารถ่ใช้�งาน constructor ของคลาสแม�ไดิ� โดิยใช้�ค�ย$เว ร$ดิ super
จ,งสามารถ่ท"า overload constructor ในคลาสแม�ไดิ�ตามป็กต
9
ร!�จ�กก�บ Overload Constructor
โป็รแกรมค"านวณค�าแรงรวม Overload Constructor
10
import java.util.Scanner; class employee { protected float rate = 300.0f, work=10.0f, pay; public employee(int h) { pay = h*rate/work; } public employee(int h, float r) { pay = h*r/work; } public employee(int h, float r, float b) { this(h,r); if (h>100) pay += b; }}
class daily_emp extends employee { public daily_emp (int h,float r) { super(h,r); }} class monthly_emp extends employee { public monthly_emp (int h, float r, float b) { super(h,r,b); }} public class InheritOverLoadTest { public static void main(String[] args) { float rate; Scanner scan = new Scanner(System.in); System.out.print("Enter total OT hour : "); int hour = scan.nextInt(); employee emp1 = new employee(hour); System.out.println("\"Employee\"\nTotal OT Pay = (" + emp1.rate + " * " + hour + ") = " + emp1.pay + " BAHT");
System.out.print("\"Daily Employee\"\nRate per Day = "); rate = scan.nextFloat(); daily_emp emp2 = new daily_emp(hour,rate); System.out.println("Total OT Pay = (" + emp2.rate + " * " + hour + ") = " + emp2.pay + " BAHT"); System.out.print("\"Monthly Employee\"\nEnter Salary = "); rate = scan.nextFloat(); System.out.print("Enter Bonus = "); float bonus = scan.nextFloat(); monthly_emp emp3 = new monthly_emp(hour,rate/30,bonus); System.out.println("Total OT Pay = (" + emp3.rate + " * " + hour + ") + " + bonus + " = " + emp3.pay + " BAHT"); }}
ร!�จ�กก�บ FinalClass และ FinalMethod Final เป็(นค�ย$เว ร$ดิท��ใช้�น"าหน�าต�วแป็ร, เมธอดิ
และคลาส ท"าให�ม�ค*ณสมบ�ต ดิ�งน�0 ต�วแป็รเป็(นค�าคงท�� ไม�สามารถ่เป็ล��ยนแป็ลงค�า
ไดิ� เมธอดิไม�สามารถ่ถ่!ก override ไดิ� คลาสไม�สามารถ่ถ่�ายทอดิค*ณสมบ�ต ไดิ�
ค�อไม�สามารถ่เป็(นคลาสแม�ไดิ�
11
โป็รแกรมการค"านวณค�าแรงรวม โดิยใช้� FinalClassimport java.util.Scanner; final class employee { float rate = 300.0f, work=10.0f; int hour; float calOT() { return hour * rate / work; } float calOT(float bonus) { float pay = hour*rate/work; if (hour>100) pay += bonus; return pay; }}
12
public class FinalTest { public static void main(String[] args) { Scanner scan = new Scanner(System.in); employee emp = new employee(); System.out.print("Enter total OT hour :
"); emp.hour = scan.nextInt(); System.out.println("\"Employee\"\nTotal
OT Pay = (" + emp.rate + " * " + emp.hour + ") = " + emp.calOT() + " BAHT");
employee daily_emp = new employee(); daily_emp.hour = emp.hour; System.out.print("\"Daily Employee\"\
nRate per Day = "); daily_emp.rate = scan.nextFloat(); System.out.println("Total OT Pay = (" +
daily_emp.rate + " * " + daily_emp.hour + ") = " +
daily_emp.calOT()+ " BAHT");
employee monthly_emp = new employee();
monthly_emp.hour = emp.hour; System.out.print("\"Monthly
Employee\"\nEnter Salary = "); monthly_emp.rate = scan.nextFloat(); monthly_emp.rate =
monthly_emp.rate/30; System.out.print("Enter Bonus = "); int b = scan.nextInt(); System.out.println("Total OT Pay = ("
+ monthly_emp.rate + " * " + monthly_emp.hour + ") + " + b + " = " +
monthly_emp.calOT(b) + " BAHT");
}}
โป็รแกรมการค"านวณค�าแรงรวม โดิยใช้� FinalMethodimport java.util.Scanner; class employee { float rate = 300.0f, work=10.0f; int hour; final float calOT() { return hour*rate/work; }} class daily_emp extends employee { } class monthly_emp extends employee { float calmOT(float bonus) { float pay = hour*rate/work; if (hour>100) pay += bonus; return pay; }}
13
public class FinalMethod { public static void main(String[] args) { Scanner scan = new Scanner(System.in); employee emp1 = new employee(); System.out.print("Enter total OT hour : "); emp1.hour = scan.nextInt(); System.out.println("\"Employee\"\nTotal OT Pay = (" + emp1.rate + " * " + emp1.hour + ") = " + emp1.calOT() + " BAHT"); daily_emp emp2 = new daily_emp(); emp2.hour = emp1.hour; System.out.print("\"Daily Employee\"\nRate per Day = "); emp2.rate = scan.nextFloat(); System.out.println("Total OT Pay = (" + emp2.rate + " * " + emp2.hour + ") = " + emp2.calOT()+ " BAHT");
monthly_emp emp3 = new monthly_emp(); emp3.hour = emp1.hour; System.out.print("\"Monthly Employee\"\nEnter Salary = "); emp3.rate = scan.nextFloat(); emp3.rate = emp3.rate/30; System.out.print("Enter Bonus = "); int b = scan.nextInt(); System.out.println("Total OT Pay = (" + emp3.rate + " * " + emp3.hour + ") + " + b + " = " + emp3.calmOT(b) + " BAHT"); }}
Encapsulation เป็(นการซ่�อนรายละเอ�ยดิเพั��อป็5องก�นไม�ให�ออบ
เจ6กต$ภายนอกเข�าถ่,งข�อม!ลไดิ�อย�างอ สระ
ออบเจ6กต$ไม�สามารถ่เร�ยกใช้�หร�อเป็ล��ยนแป็ลงค�าข�อม!ลไดิ�
สามารถ่จ"าก�ดิส ทธ การใช้�งานแอตทร บ วต$และเมธอดิไดิ�ดิ�วยระดิ�บการเข�าใช้�งานของ access modifier
หากต�องการซ่�อนรายละเอ�ยดิ ให�ก"าหนดิเป็(นแบบ private
หากต�องการใช้�งานแอตทร บ วต$หร�อเมธอดิใดิๆ ให�ก"าหนดิเป็(นแบบ public
14
โป็รแกรมค"านวณค�าแรงรวม ใช้� Encapsulation
15