15
บบบบบ 11 Inheritance บบบ Encapsulation

บทที่ 11

Embed Size (px)

DESCRIPTION

บทที่ 11. Inheritance และ Encapsulation. ความหมายของ Inheritance. การสร้างหรือพัฒนาคลาสใหม่จากคลาสเดิมที่มีอยู่แล้ว คลาสใหม่จะนำแอ ตทริบิวต์ และเมธอดของคลาสเดิมมาใช้ เป็นการถ่ายทอดคุณสมบัติจากคลาสหนึ่งสู่อีกคลาสหนึ่งนั่นเอง เรียกคลาสที่ถ่ายทอดคุณสมบัติของคลาสว่า คลาสแม่ ( SuperClass ) - PowerPoint PPT Presentation

Citation preview

Page 1: บทที่ 11

บทท�� 11

Inheritance และ Encapsulation

Page 2: บทที่ 11

ความหมายของ Inheritance การสร�างหร�อพั�ฒนาคลาสใหม�จากคลาสเดิ มท��ม�

อย!�แล�ว คลาสใหม�จะน"าแอตทร บ วต$และเมธอดิของคลาส

เดิ มมาใช้� เป็(นการถ่�ายทอดิค*ณสมบ�ต จากคลาสหน,�งส!�อ�ก

คลาสหน,�งน��นเอง เร�ยกคลาสท��ถ่�ายทอดิค*ณสมบ�ต ของคลาสว�า คลาสแม� (SuperClass) เร�ยกคลาสท��ไดิ�ร�บการถ่�ายทอดิว�า คลาสล!ก (Subclass)

คลาสล!กสามารถ่พั�ฒนาต�อเต มแอตทร บ วต$และเมธอดิของต�วเองไดิ�

คลาสล!กสามารถ่ป็ร�บป็ร*งแก�ไขแอตทร บ วต$และเมธอดิเดิ มท��ไดิ�ร�บมาจากคลาสแม�ไดิ�

2

Page 3: บทที่ 11

ต�วอย�างการสร�างคลาสแม� - คลาสล!ก

3

คลาส Car เป็(นคลาสรถ่ท��วไป็ท��ม�สามารถ่ สตาร$ทเคร��องไดิ� – start() เป็ล��ยนเก�ยร$ไดิ� – ChangeGear() ดิ�บเคร��องไดิ� – stop()

คลาส Bus เป็(นคลาสรถ่บ�สท��ม�สามารถ่ สตาร$ทเคร��องไดิ� เป็ล��ยนเก�ยร$ไดิ� ดิ�บเคร��องไดิ� ม�ผู้!�โดิยสาร - Seat

ดิ�งน�0น คลาส Car เป็(นคลาสแม� และคลาส Bus เป็(นคลาสล!กท��ส�บทอดิค*ณสมบ�ต จากคลาส Car

Page 4: บทที่ 11

ร!�จ�กก�บคลาสแม� (SuperClass)

4

เป็(นคลาสท��เป็(นต�นแบบของแอตทร บ วต$และเมธอดิ

อน*ญาตให�คลาสอ��นส�บทอดิแอตทร บ วต$และเมธอดิไป็ไดิ�ท�0งหมดิ ยกเว�นแอตทร บ วต$ท��ม�ระดิ�บการเข�าถ่,งเป็(น private และเมธอดิท��เป็(น constructor

ระดิ�บการเข�าถ่,งแอตทร บ วต$และเมธอดิของคลาสแม�เป็(น protected ม�ร!ป็แบบการใช้�งาน ดิ�งน�0[modifier] class SuperClassName {

[AttributeName] [MethodName]}

โดิยท�� modifier เป็(นค�ย$เว ร$ดิท��ก"าหนดิค*ณสมบ�ต การเข�าถ่,งคลาสSuperClassName เป็(นช้��อคลาสแม�AttributeName เป็(นส�วนของการป็ระกาศแอตทร บ วต$MethodName เป็(นส�วนของการป็ระกาศเมธอดิ

Page 5: บทที่ 11

ร!�จ�กก�บคลาสล!ก (SubClass) เป็(นคลาสท��ส�บทอดิแอตทร บ วต$และเมธอดิจาก

คลาสแม� คลาสล!กสามารถ่เร�ยกใช้�แอตทร บ วต$และเมธอดิ

จากคลาสแม�ไดิ� และคลาสล!กม�แอตทร บ วต$และเมธอดิเพั �มเต มเป็(น

ของต�วเองไดิ� การระบ*ความส�มพั�นธ$ให�คลาสเป็(นคลาสล!กต�องใช้�

ค�ย$เว ร$ดิ extends ม�ร!ป็แบบการใช้�งาน ดิ�งน�0[modifier] class SubClassName extends SuperClassName {

[AttributeName] [MethodName]

}

5

โดิยท�� modifier เป็(นค�ย$เว ร$ดิท��ก"าหนดิค*ณสมบ�ต การเข�าถ่,งคลาสSubClassName เป็(นช้��อคลาสล!กSuperClassName เป็(นช้��อคลาสแม�AttributeName เป็(นส�วนของการป็ระกาศแอตทร บ วต$MethodName เป็(นส�วนของการป็ระกาศเมธอดิ

Page 6: บทที่ 11

โป็รแกรมก"าหนดิค�าแรงรายว�นให�ก�บคลาสแม�-คลาสล!ก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"); }}

Page 7: บทที่ 11

ร!�จ�กก�บ Overriding method

Overriding เป็(นการเป็ล��ยนแป็ลงการท"างานของเมธอดิในคลาสล!กท��ส�บทอดิมาจากคลาสแม�

เมธอดิในคลาสล!กจะม�ช้��อเมธอดิ, ช้น ดิข�อม!ลท��ค�นค�า, จ"านวนและช้น ดิข�อม!ลของอาร$ก วเมนต$ท��เหม�อนก�บคลาสแม�

สามารถ่พั�ฒนาเมธอดิให�ม�การท"างานในเร��องเดิ�ยวก�น แต�แตกต�างก�นในรายละเอ�ยดิของการท"างาน เช้�น การค"านวณหาพั�0นท��ของร!ป็ทรงเรขาคณ ตต�าง ๆ ท��ม�

ส!ตรค"านวณท��แตกต�างก�น การค"านวณค�าแรงของพัน�กงานท��ม�ว ธ�ค"านวณท��แตก

ต�างก�นไป็ในแต�ละต"าแหน�ง

7

Page 8: บทที่ 11

โป็รแกรมค"านวณค�าแรงรวม 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"); }}

Page 9: บทที่ 11

constructor เป็(นส �งท��คลาสล!กไม�สามารถ่ส�บทอดิจากคลาสแม�ไดิ�

แต�คลาสล!กสามารถ่ใช้�งาน constructor ของคลาสแม�ไดิ� โดิยใช้�ค�ย$เว ร$ดิ super

จ,งสามารถ่ท"า overload constructor ในคลาสแม�ไดิ�ตามป็กต

9

ร!�จ�กก�บ Overload Constructor

Page 10: บทที่ 11

โป็รแกรมค"านวณค�าแรงรวม 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"); }}

Page 11: บทที่ 11

ร!�จ�กก�บ FinalClass และ FinalMethod Final เป็(นค�ย$เว ร$ดิท��ใช้�น"าหน�าต�วแป็ร, เมธอดิ

และคลาส ท"าให�ม�ค*ณสมบ�ต ดิ�งน�0 ต�วแป็รเป็(นค�าคงท�� ไม�สามารถ่เป็ล��ยนแป็ลงค�า

ไดิ� เมธอดิไม�สามารถ่ถ่!ก override ไดิ� คลาสไม�สามารถ่ถ่�ายทอดิค*ณสมบ�ต ไดิ�

ค�อไม�สามารถ่เป็(นคลาสแม�ไดิ�

11

Page 12: บทที่ 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");

}}

Page 13: บทที่ 11

โป็รแกรมการค"านวณค�าแรงรวม โดิยใช้� 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"); }}

Page 14: บทที่ 11

Encapsulation เป็(นการซ่�อนรายละเอ�ยดิเพั��อป็5องก�นไม�ให�ออบ

เจ6กต$ภายนอกเข�าถ่,งข�อม!ลไดิ�อย�างอ สระ

ออบเจ6กต$ไม�สามารถ่เร�ยกใช้�หร�อเป็ล��ยนแป็ลงค�าข�อม!ลไดิ�

สามารถ่จ"าก�ดิส ทธ การใช้�งานแอตทร บ วต$และเมธอดิไดิ�ดิ�วยระดิ�บการเข�าใช้�งานของ access modifier

หากต�องการซ่�อนรายละเอ�ยดิ ให�ก"าหนดิเป็(นแบบ private

หากต�องการใช้�งานแอตทร บ วต$หร�อเมธอดิใดิๆ ให�ก"าหนดิเป็(นแบบ public

14

Page 15: บทที่ 11

โป็รแกรมค"านวณค�าแรงรวม ใช้� Encapsulation

15