Slide 1

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

similar documents