Transcript Slide 1

Inheritance และ
Encapsulation



่
การสร ้างหรือพัฒนาคลาสใหม่จากคลาสเดิมทีมี
อยู ่แล้ว
คลาสใหม่จะนาแอตทริบวิ ต ์และเมธอดของคลาส
เดิมมาใช้
เป็ นการถ่ายทอดคุณสมบัตจ
ิ ากคลาสหนึ่งสูอ
่ ก
ี
คลาสหนึ่งนั่นเอง
่ ายทอดคุณสมบัตข
เรียกคลาสทีถ่
ิ องคลาสว่า
คลาสแม่ (SuperClass)
่ ร ับการถ่ายทอดว่า คลาสลู ก
เรียกคลาสทีได้
(Subclass)
2

่
่ สามารถ
คลาส Car เป็ นคลาสรถทัวไปที
มี




่ สามารถ
คลาส Bus เป็ นคลาสรถบัสทีมี



่
สตาร ์ทเครืองได้
– start()
่
เปลียนเกี
ยร ์ได้ – ChangeGear()
่
ดับเครืองได้
– stop()
่
่
่
สตาร ์ทเครืองได้
เปลียนเกี
ยร ์ได้ ดับเครืองได้
มีผูโ้ ดยสาร - Seat
้ คลาส Car เป็ นคลาสแม่ และ
ด ังนัน
่ บทอดคุณสมบัตจ
คลาส Bus เป็ นคลาสลู กทีสื
ิ าก
คลาส Car
3
่
่ นต้นแบบของแอตทริบวิ ต ์และเมธ
โดยที
เป็ นคลาสที
เป็


่ าหนดคุณสมบัต ิ
modifier
เป็ นคีย ์เวิร ์ดทีก
อด
การเข้
าถึงคลาส
่ บทอดแอตทริบวิ ต ์และเมธ
อนุ
ญาตให้
คลาสอืนสื
่
SuperClassName
เป็
นชื
อคลาสแม่
้
อดไปได้ทงหมด
ั
AttributeName
เป็ นส่วนของการประกาศ
่
ยกเว้นแอตทริบวิ ต ์ทีมีระด ับการเข้าถึงเป็ น
แอตทริบวิ ต ์
private และ
MethodName
เป็ นส่วนของการประกาศเมธอด
่
เมธอดทีเป็ น constructor
ระด ับการเข้าถึงแอตทริบวิ ต ์และเมธอดของคลาส
แม่เป็ น protected
มีรูปแบบการใช้งาน ด ังนี ้
4
โดยที่
่ บทอดแอตทริบวิ ต ์และเมธอดจาก
 เป็ นคลาสทีสื
่ าหนดคุณสมบัต ิ
modifier
เป็ นคีย ์เวิร ์ดทีก
คลาสแม่
การเข้าถึงคลาส
่ อตทริบกว
 คลาสลู
กสามารถเรียเป็กใช้
ิ ต ์และเมธอด
SubClassName
นชืแ
อคลาสลู
่
SuperClassName
เป็ นชือคลาสแม่
จากคลาสแม่
ได้
AttributeName
เป็บ
นส่
่
 และคลาสลู
กมีแอตทริ
วิ ตวนของการประกาศ
์และเมธอดเพิมเติ
มเป็ น
แอตทริบวิ ต ์
ของต ัวเองได้
MethodName เป็ นส่วนของการประกาศเมธอด

การระบุความสัมพันธ ์ให้คลาสเป็ นคลาสลู กต้อง
ใช้คย
ี ์เวิร ์ด extends
มีรูปแบบการใช้งาน ด ังนี ้
[modifier] class SubClassName extends
5
public class SupSubClassTest {
public static void main(String[] args) {
float r;
import java.util.Scanner;
employee emp1 = new employee();
class employee
{
System.out.println("\"Employee\"\nRate
per
protected
float
rate=300.0f;
Day="
+emp1.rate+"BAHT");
}
Scanner scan = new Scanner(System.in);
System.out.print("\"Daily
class daily_emp
extends employeeEmployee\"\nEnter
{
Rate = ");
}
r = scan.nextFloat();
class monthly_emp
extends employee {
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();
6
emp3.rate = r;



่
Overriding เป็ นการเปลียนแปลงการท
างาน
ของเมธอดในคลาสลู ก
่ บทอดมาจากคลาสแม่
ทีสื
เมธอดในคลาสลู กจะมีชอเมธอด,
ื่
ชนิ ดข้อมู ลที่
คืนค่า, จานวนและชนิ ดข้อมู ลของอาร ์กิวเมนต ์ที่
เหมือนก ับคลาสแม่
่
สามารถพัฒนาเมธอดให้มก
ี ารทางานในเรือง
เดียวกัน แต่แตกต่างกัน
ในรายละเอียดของการทางาน เช่น

้ ของรู
่
่
การคานวณหาพืนที
ปทรงเรขาคณิ ตต่าง ๆ ทีมี
7
่
สู ตรคานวณทีแตกต่
างกน
ั
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();
import java.util.Scanner;
emp1.hour = scan.nextInt();
class employee {
System.out.println("\"Employee\"\nTotal OT
protected float rate = 300.0f,
Pay = ("work=10.0f;
+ emp1.rateint
+ hour;
float calOT() {
" * " + emp1.hour + ") = " + emp1.calOT()
return hour*rate/work;
+ " BAHT");
}
daily_emp emp2 = new daily_emp();
}
emp2.hour = emp1.hour;
System.out.print("\"Daily
Employee\"\nRate
class daily_emp extends
employee {
per Day = ");
}
emp2.rate
= scan.nextFloat();
class monthly_emp extends
employee
{
System.out.println("Total OT Pay = (" +
float pay, bonus;
emp2.rate + " * " +
float calOT() {
pay = hour*rate/work; emp2.hour + ") = " + emp2.calOT()+ "
BAHT");
if (hour>100)
monthly_emp emp3 = new monthly_emp();
pay += bonus;
emp3.hour = emp1.hour;
return pay;
System.out.print("\"Monthly
}
Employee\"\nEnter Salary = ");
}
emp3.rate = scan.nextFloat()/30;
8



่ คลาสลู
่
constructor เป็ นสิงที
กไม่สามารถสืบ
ทอดจากคลาสแม่ได้
แต่คลาสลู กสามารถใช้งาน constructor ของ
คลาสแม่ได้
โดยใช้คย
ี ์เวิร ์ด super
จึงสามารถทา overload constructor ในคลาส
แม่ได้ตามปกติ
9
class daily_emp extends employee {
public daily_emp (int h,float r) {
super(h,r);
}
import java.util.Scanner; }
class employee {
class monthly_emp extends employee {
System.out.print("\"Daily
Employee\"\nRate
protected
work=10.0f,
pay; (int h, float r, float b) {
public
monthly_emp
per Day
= "); float rate = 300.0f,
public
employee(int h) { super(h,r,b);
rate
= scan.nextFloat();
pay = h*rate/work;
}
daily_emp
emp2 = new daily_emp(hour,rate);
}
} Pay = (" +
System.out.println("Total
OT
public+employee(int
h, float
r) { class InheritOverLoadTest {
public
emp2.rate
" * " + hour +
pay
public static void main(String[] args) {
") == "h*r/work;
+ emp2.pay + " BAHT");
}
float rate;
public employee(int h, floatScanner
r, float b)
{ = new Scanner(System.in);
scan
System.out.print("\"Monthly
this(h,r);
Employee\"\nEnter
Salary = "); System.out.print("Enter total OT hour : ");
int hour = scan.nextInt();
rateif=(h>100)
scan.nextFloat();
pay += b;
emp1 = new employee(hour);
System.out.print("Enter
Bonusemployee
= ");
} bonus = scan.nextFloat();System.out.println("\"Employee\"\nTotal
float
}
monthly_emp
emp3 = new OT Pay = (" + emp1.rate + " * " + hour + ")
= " + emp1.pay + " BAHT");
monthly_emp(hour,rate/30,bonus);
10
System.out.println("Total OT Pay = (" +

่ นาหน้าต ัวแปร, เมธอด
Final เป็ นคีย ์เวิร ์ดทีใช้
และคลาส
ทาให้มค
ี ณ
ุ สมบัตด
ิ ังนี ้
่
 ต ัวแปรเป็ นค่าคงที่ ไม่สามารถเปลียนแปลงค่
า
ได้
 เมธอดไม่สามารถถู ก override ได้
 คลาสไม่สามารถถ่ายทอดคุณสมบัตไ
ิ ด้
คือไม่สามารถเป็ นคลาสแม่ได้
11
import java.util.Scanner;
public class FinalTest {
final class employee
{
public
static void main(String[] args) {
float rate = 300.0f,Scanner
work=10.0f;
hour;
scan int
= new
Scanner(System.in);
float calOT() {
employee emp = new employee();
return hour * rateSystem.out.print("Enter
/ work;
total OT hour : ");
employee
monthly_empemp.hour
= new employee();
}
= scan.nextInt();
monthly_emp.hour
=
emp.hour;
float calOT(float bonus)
{
System.out.println("\"Employee\"\nTotal
OT Pay =
System.out.print("\"Monthly
float pay = hour*rate/work;
(" + emp.rate + " * " + emp.hour + ") = " +
Employee\"\nEnter
Salary
= ");
if (hour>100)
emp.calOT() + " BAHT");
monthly_emp.rate
pay += bonus;= scan.nextFloat();
employee daily_emp = new employee();
monthly_emp.rate
=
monthly_emp.rate/30;
return pay;
daily_emp.hour
= emp.hour;
System.out.print("Enter
Bonus
=
");
}
System.out.print("\"Daily Employee\"\nRate per
int
b
=
scan.nextInt();
}
DayOT
= ");
System.out.println("Total
Pay = (" +
= scan.nextFloat();
monthly_emp.rate + daily_emp.rate
"*"+
OT Pay = (" +
monthly_emp.hour +System.out.println("Total
") + " + b + " = " +
daily_emp.rate
+"*"+
monthly_emp.calOT(b)
+ " BAHT");
12
import java.util.Scanner;
public class FinalMethod {
class employee {
public static
main(String[] args) {
float rate = 300.0f, work=10.0f;
intvoid
hour;
final float calOT() {
Scanner scan = new Scanner(System.in);
return hour*rate/work;
employee emp1 = new employee();
}
System.out.print("Enter total OT hour : ");
}
monthly_emp
emp3extends
= new monthly_emp();
emp1.hour
class daily_emp
employee { = scan.nextInt();
}
emp3.hour
= emp1.hour; System.out.println("\"Employee\"\nTotal OT
class monthly_emp extends
employee
{
System.out.print("\"Monthly
Pay = ("
+
float calmOT(float bonus) {
Employee\"\nEnter
Salary =emp1.rate
");
+ " * " + emp1.hour + ") = " +
float pay = hour*rate/work;
emp3.rate
= scan.nextFloat();
emp1.calOT() + " BAHT");
if (hour>100)
pay +=
emp3.rate
= bonus;
emp3.rate/30;daily_emp emp2 = new daily_emp();
return pay;
System.out.print("Enter
Bonus
= "); = emp1.hour;
emp2.hour
}
int
System.out.print("\"Daily Employee\"\nRate
} b = scan.nextInt();
System.out.println("Total
Pay
perOT
Day
==
");(" +
emp3.rate + " * " +
emp2.rate = scan.nextFloat();
emp3.hour + ") + " +System.out.println("Total
b+"="+
OT Pay = (" +
13




่ องกันไม่ให้
เป็ นการซ่อนรายละเอียดเพือป้
ออบเจ็กต ์ภายนอกเข้าถึงข้อมู ล
ได้อย่างอิสระ
่
ออบเจ็กต ์ไม่สามารถเรียกใช้หรือเปลียนแปลงค่
า
ข้อมู ลได้
สามารถจาก ัดสิทธิการใช้งานแอตทริบวิ ต ์และ
เมธอดได้ดว้ ย
ระด ับการเข้าใช้งานของ access modifier
หากต้องการซ่อนรายละเอียด ให้กาหนดเป็ นแบบ
private
14
15