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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างโปรแกรมภาษา JAVA
Advertisements

Suphot Sawattiwong Array ใน C# Suphot Sawattiwong
Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
การจัดการความผิดพลาด
File.
Inheritance.
Week 6 ประกาศค่าตัวแปร.
05_3_Constructor.
การเขียนโปรแกรมภาษาจาวาตอนที่ ๓
ครั้งที่ 7 Composition.
หลักการเชิงวัตถุ อาจารย์ศิริพร ศักดิ์บุญญารัตน์
Selected Topics in IT (Java)
การสืบทอด (Inheritance)
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
บทที่ 3 Class and Object (1) การสร้างและการใช้งานคลาส
คลาสและวัตถุ (2) (Class & Object)
 เป็นเมธอดที่มีคุณลักษณะของ Polymorphism รูปแบบหนึ่ง โดยใช้ชื่อเมธอดเดียวกัน มากกว่า 1 เมธอด เพื่อทำงานในแบบเดียวกัน  คลาสลูกสามารถเขียนทับ เมธอดของคลาสแม่ได้
บทที่ 1 หลักการเขียนโปรแกรมเชิงวัตถุ
คลาสและวัตถุ (3) (Class & Object)
คลาสและวัตถุ (2) (Class & Object)
คลาสและวัตถุ (4) (Class & Object)
บทที่ 4 Method (2).
คลาสและวัตถุ (3) (Class & Object). w5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 24, 25 as5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 23 2.
คลาสและวัตถุ (4) (Class & Object)
บทที่ 4 Method (1).
การสืบทอดคุณสมบัติ (Inheritance)
Generalization & Specialization
Lecture 9 Class (คลาส) To do: Hand back assignments
Inheritance การสืบทอดคลาส
String Class มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
input from keyboard มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 15 มิถุนายน 2550 Structure Programming มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 3 มิถุนายน 2550 Method of Class มหาวิทยาลัยเนชั่น.
บทที่ 6 เมธอด.
ทำงานกับ File และStream
JAVA PROGRAMMING PART IV.
เมธอดคือหน้าที่การงานของวัตถุให้เรียกใช้
ความสัมพันธ์ระหว่างคลาส (Class Relationship)
Method of Class อ.สุพจน์ สิงหัษฐิต
Lec03 :: หลักการเชิงออปเจ็ค (Object Oriented Concept)
Lec05 :: การสืบทอด (inheritance)
การเขียนโปรแกรม ตอนที่ 1 (ต่อ)
Object-Oriented Programming
บทที่ 3 Class and Object (2).
บทที่ 2 การแสดงผลและรับข้อมูล
บทที่ 4 คำสั่งควบคุมแบบมีทางเลือก
Java Programming Java Structure and Datatype,Variable
สายอักขระ เขียนโปรแกรม Java เบื้องต้น.
Object Oriented Programming : OOP
การแสดงผลและการรับข้อมูล (Data Output and Input)
การสืบทอด (inheritance)
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
TECH30201 Object-Oriented Programming
Object-Oriented Programming
คอนสตรัคเตอร์ (Constructor)
การจัดการกับความผิดปกติ
Variable, Data type, Expression, Operators Data input, Data output
chapter 2 - Construction and destruction - Overloading method
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
เริ่มต้นเขียนโปรแกรมภาษาจา วา (Introduction to JAVA Programming)
Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554.
Chapter 6 Abstract Class and Interface
Computer Programming Asst. Prof. Dr. Choopan Rattanapoka
บทที่ 3 การสืบทอด (Inheritance)
การเขียนโปรแกรมบนมาตรฐานเปิด โครงสร้างโปรแกรม public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World”);
Inheritance and Method Overriding
Chapter 5 การจัดการข้อผิดพลาด (Exception Handling)
Method and Encapsulation
Inheritance and Encapsulation
Class Inheritance and Interfaces.
ใบสำเนางานนำเสนอ:

Inheritance และ Encapsulation

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

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

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

 เป็นคลาสที่สืบทอดแอตทริบิวต์และเมธอดจาก คลาสแม่  คลาสลูกสามารถเรียกใช้แอตทริบิวต์และเมธ อดจากคลาสแม่ได้  และคลาสลูกมีแอตทริบิวต์และเมธอดเพิ่มเติม เป็นของตัวเองได้  การระบุความสัมพันธ์ให้คลาสเป็นคลาสลูก ต้องใช้คีย์เวิร์ด extends มีรูปแบบการใช้งาน ดังนี้ [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 เป็นการเปลี่ยนแปลงการทำงาน ของเมธอดในคลาสลูก ที่สืบทอดมาจากคลาสแม่  เมธอดในคลาสลูกจะมีชื่อเมธอด, ชนิดข้อมูล ที่คืนค่า, จำนวนและชนิดข้อมูลของ อาร์กิวเมนต์ที่เหมือนกับคลาสแม่  สามารถพัฒนาเมธอดให้มีการทำงานในเรื่อง เดียวกัน แต่แตกต่างกัน ในรายละเอียดของการทำงาน เช่น  การคำนวณหาพื้นที่ของรูปทรงเรขาคณิตต่าง ๆ ที่ มีสูตรคำนวณที่แตกต่างกัน  การคำนวณค่าแรงของพนักงานที่มีวิธีคำนวณที่ แตกต่างกันไปในแต่ละตำแหน่ง 7

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

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"); }

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

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; } 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"); }

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; } 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"); }

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

15