1 / 15

บทที่ 11

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

hop-sweeney
Download Presentation

บทที่ 11

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 11 Inheritance และ Encapsulation

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

  3. ตัวอย่างการสร้างคลาสแม่ - คลาสลูก • คลาส Car เป็นคลาสรถทั่วไปที่มีสามารถ • สตาร์ทเครื่องได้ – start() • เปลี่ยนเกียร์ได้ – ChangeGear() • ดับเครื่องได้ – stop() • คลาส Bus เป็นคลาสรถบัสที่มีสามารถ • สตาร์ทเครื่องได้ เปลี่ยนเกียร์ได้ ดับเครื่องได้ • มีผู้โดยสาร - Seat • ดังนั้น คลาส Car เป็นคลาสแม่ และ คลาส Bus เป็นคลาสลูกที่สืบทอดคุณสมบัติจากคลาส Car

  4. รู้จักกับคลาสแม่ (SuperClass) • เป็นคลาสที่เป็นต้นแบบของแอตทริบิวต์และเมธอด • อนุญาตให้คลาสอื่นสืบทอดแอตทริบิวต์และเมธอดไปได้ทั้งหมด ยกเว้นแอตทริบิวต์ที่มีระดับการเข้าถึงเป็น private และ เมธอดที่เป็น constructor • ระดับการเข้าถึงแอตทริบิวต์และเมธอดของคลาสแม่เป็น protected มีรูปแบบการใช้งาน ดังนี้ [modifier] class SuperClassName { [AttributeName] [MethodName] } โดยที่ modifier เป็นคีย์เวิร์ดที่กำหนดคุณสมบัติการเข้าถึงคลาส SuperClassName เป็นชื่อคลาสแม่ AttributeName เป็นส่วนของการประกาศแอตทริบิวต์ MethodName เป็นส่วนของการประกาศเมธอด

  5. รู้จักกับคลาสลูก (SubClass) โดยที่ modifier เป็นคีย์เวิร์ดที่กำหนดคุณสมบัติการเข้าถึงคลาส SubClassNameเป็นชื่อคลาสลูก SuperClassNameเป็นชื่อคลาสแม่ AttributeName เป็นส่วนของการประกาศแอตทริบิวต์ MethodName เป็นส่วนของการประกาศเมธอด • เป็นคลาสที่สืบทอดแอตทริบิวต์และเมธอดจากคลาสแม่ • คลาสลูกสามารถเรียกใช้แอตทริบิวต์และเมธอดจากคลาสแม่ได้ • และคลาสลูกมีแอตทริบิวต์และเมธอดเพิ่มเติมเป็นของตัวเองได้ • การระบุความสัมพันธ์ให้คลาสเป็นคลาสลูกต้องใช้คีย์เวิร์ดextends มีรูปแบบการใช้งาน ดังนี้ [modifier] class SubClassName extends SuperClassName { [AttributeName] [MethodName] }

  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"); } } import java.util.Scanner;  class employee { protected float rate=300.0f; }  class daily_emp extends employee {  }  class monthly_emp extends employee {  }

  7. รู้จักกับ Overriding method • Overriding เป็นการเปลี่ยนแปลงการทำงานของเมธอดในคลาสลูก ที่สืบทอดมาจากคลาสแม่ • เมธอดในคลาสลูกจะมีชื่อเมธอด, ชนิดข้อมูลที่คืนค่า, จำนวนและชนิดข้อมูลของอาร์กิวเมนต์ที่เหมือนกับคลาสแม่ • สามารถพัฒนาเมธอดให้มีการทำงานในเรื่องเดียวกัน แต่แตกต่างกัน ในรายละเอียดของการทำงาน เช่น • การคำนวณหาพื้นที่ของรูปทรงเรขาคณิตต่าง ๆ ที่มีสูตรคำนวณที่แตกต่างกัน • การคำนวณค่าแรงของพนักงานที่มีวิธีคำนวณที่แตกต่างกันไปในแต่ละตำแหน่ง

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

  9. รู้จักกับ Overload Constructor • constructor เป็นสิ่งที่คลาสลูกไม่สามารถสืบทอดจากคลาสแม่ได้ • แต่คลาสลูกสามารถใช้งาน constructor ของคลาสแม่ได้ โดยใช้คีย์เวิร์ด super • จึงสามารถทำ overload constructor ในคลาสแม่ได้ตามปกติ

  10. class daily_emp extends employee { public daily_emp (inth,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");  โปรแกรมคำนวณค่าแรงรวม Overload Constructor 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; } }  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"); } }

  11. รู้จักกับ FinalClassและ FinalMethod • Final เป็นคีย์เวิร์ดที่ใช้นำหน้าตัวแปร, เมธอด และคลาส ทำให้มีคุณสมบัติดังนี้ • ตัวแปรเป็นค่าคงที่ ไม่สามารถเปลี่ยนแปลงค่าได้ • เมธอดไม่สามารถถูก override ได้ • คลาสไม่สามารถถ่ายทอดคุณสมบัติได้ คือไม่สามารถเป็นคลาสแม่ได้

  12. โปรแกรมการคำนวณค่าแรงรวม โดยใช้ FinalClass import 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; } }  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"); • } • }

  13. โปรแกรมการคำนวณค่าแรงรวม โดยใช้ FinalMethod import 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; } } 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"); } }

  14. Encapsulation • เป็นการซ่อนรายละเอียดเพื่อป้องกันไม่ให้ออบเจ็กต์ภายนอกเข้าถึงข้อมูล ได้อย่างอิสระ • ออบเจ็กต์ไม่สามารถเรียกใช้หรือเปลี่ยนแปลงค่าข้อมูลได้ • สามารถจำกัดสิทธิการใช้งานแอตทริบิวต์และเมธอดได้ด้วย ระดับการเข้าใช้งานของ access modifier • หากต้องการซ่อนรายละเอียด ให้กำหนดเป็นแบบ private • หากต้องการใช้งานแอตทริบิวต์หรือเมธอดใดๆ ให้กำหนดเป็นแบบ public

  15. โปรแกรมคำนวณค่าแรงรวม ใช้ Encapsulation

More Related