inheritance
การสืบทอด(inheritance) ในโปรแกรมเชิงวัตถุเป็นเเนวความคิดที่เรียนเเบบจากการสืบทอดลักษณะ ของลูกจากพ่อเเม่ ภาษาโปรแกรม ภาษาโปรแกรมเชิงวัตถุนำการสืบทอด มาใช้กับคลาสและอินเทอร์เฟช
ในการเขียนโปรแกรมภาษา Java นั้นเราไม่จำเป็นต้องสร้างคลาสขึ้นมาใหม่เองทั้งหมด แต่เราสามารถใช้คลาสที่มีคนสร้างไว้ หรือที่เราเคยสร้างไว้อยู่แล้วมาใช้ให้เป็นประโยชน์ได้
กลไลการสืบทอด
กลไกลการสืบทอด ช่วยแก้ไขปัญหาการเขียนโปรแกรม ซ้ำซ้อนกันได้ เมธอดหรือ แอตทริบิวต์ที่คลาสต่างๆ มีร่วมกันอยู่จะถูกนำไปใส่คลาสเเม่ คลาสลูกจะสืบทอดเมธอด เเละแอตทริบิวต์แม่โดยอัตโนมัติ การเเก้ไขการเปลี่ยนแปลงเมธอดในคลาสเเม่จะทำให้คลาสลูกเปลี่ยนตามไปด้วย เเมว ปลา เเละ ลิง ล้วนเป็นสัตว์ สัตว์ทุกตัวสามารถ กินเเละนอนได้ เราจึงนำแอตทริบิวต์เเละเมธอดที่สัตว์ต่างๆมีร่วมกัน ไปใส่ในคลาสสัตว์ คลาสสัตว์เขียนเป็น ภาษาไทยปนภาษา จาวา ได้ดังนี้
class สัตว์ {
// แอตทริบิวต์
อายุ ;
ความหิว ;
// เมธอด
กิน() {...}
นอน() {...}
หลังจากนั้น เราจะสามารถทำการเชื่มต่อคลาส เเมว ปลาเเละลิงกับคลาสสัตว์ โดยอาศัยกลไกลของการสืบทอด การสืบทอดในภาษาไทยปนภาษา จาวา ใช้คำว่า extends (ภาษา จาวา ก็ใช้extends เหมือนกัน ) การสืบทอดมีภาพเเบบดังนี้
ภาพเเบบ
class คลาสลูก extends คลาสเเม่
ตัวอย่างเช่น
class เเมว extends สัตว์ {
}
classปลา extends สัตว์ {
}
classลิง extends สัตว์{
}
เรื่องเกี่ยวกับการ Inheritance
เรื่องเกี่ยวกับการ Inheritance จะมีส่วนประกอบหลายส่วนประกอบกันที่คุณต้องทำความรู้จักดังนี้
- SuperClass เป็นคลาสที่เป็นต้นแบบให้คลาสอื่นสืบทอดคุณสมบัติ
- SubClass เป็นคลาสที่สืบทอดคุณสมบัติจากคลาสอื่น
- FinalClass คลาสที่ไม่ยอมให้คลาสอื่นสืบทอดคุณสมบัติ
- Override method การปรับเปลี่ยนคุณสมบัติของเมธอดในคลาสลูกให้ต่างจากคลาสแม่
SuperClass และ SubClass
- SuperClass เรียกง่ายๆ ว่า คลาสแม่ เป็นคลาสที่เป็นต้นแบบให้คลาสอื่นสืบทอดคุณลักษณะ เช่นคลาส Animal เป็น SuperClass ของคลาส Lion, คลาส elephant, คลาส Tiger, คลาส Dog และคลาส Cat
- SubClass เรียกง่ายๆ ว่า คลาสลูก เป็นคลาสที่สืบทอดคุณลักษณะ (ทั้งแอตทริบิวต์ และเมธอด)
ตัวอย่างสืบทอดไปสู่ SubClass ได้บ้าง
ตัวอย่าง 1
pulic class inheritUsing{
public static void main (String[]args){
Father ada = nwe Father();
String strIn = dad.ShowFather();
System.out.println(strIn);
son child =new Son();
strIn = child.ShowSon();
System.out.println(strIn);
strIn = child.ShowFather();
System.out.println(strIn);
}
}
class Father{
private int f1;
String ShowFather()
{
f1=(int) (Math.random()*10)+30;
return "class Father : age =" + f1;
}
}
class Son extends Father
private int s1;
String ShowSon()
{
s1 = (int)(Math.random()*10);
return "class Son : age =" +s1;
}
}
Override method
เป็นการแก้ไขเมธอดที่สืบทอดมาจากคลาสแม่ ซึ่งการ Override เมธอดในคลาสแม่นั้น คลาสลูกจะต้องมีชื่อของเมธอด ,ค่าส่งกลับออกจากเมธอด และค่าอาร์กิวเมนต์เหมือนคลาสแม่ แต่จะปรับปรุงการทำงานภายในที่ไม่เหมือนกับคลาสแม่
ตัวออย่าง 2
Public class
InheritOverride{
public static
void main(String[]args){
Parent dadmom = new Parent();
System.out.println(dadmom.Show());
Child
kid = new Child();
System.out.println(kid.Show
());
}
}
Class Parent {
Private
int px;
String Show(){
Px
= (int)(Math.random()*100);
Return “px = ”+ px;
}
}
Class Child extends Parent {
Private
int cx;
String Show() {
Cx
= (int)(Math.random()*100)-200;
Return
“cx = ” + cx;
}
}
FinalClass
คลาสที่ใช้คีย์เวิร์ด final กับตัวคลาส ทำให้เป็นคลาสที่ไม่สามารถืบทอดคุณสมบัติได้ แต่หากกำหนด คีย์เวิร์ด final ให้กับเพียงแค่บางเมธอดภายในคลาสที่เป็นแม่แล้ว จะทำให้คลาสลูกที่สืบทอดจากไม่สามารถแก้ไขข้อมูลต่างๆ ภายในเมธอดที่สืบทอดจากคลาสแม่ได้ (แต่คลาสแม่ยังสืบทอดต่อไปได้)
ตัวอย่าง 3
Final class Dinosaur
{
public int Weinght = 5000l;
String Show () {
Return
“I am Dinosaur. Wiegt =” + “kg”;
}
}
Class Reptile {
public int
Weight = 30;
final String
ShowReptile(){
return
“I am
reptile. Weight = ”+ Weight + “ kg ”;
}
}
ตัวอย่างที่ 4
class Calculation{
int z;
public void
addition(int x, int y){
z=x+y;
System.out.println("The sum of the given numbers:"+z);
}
public void
Substraction(int x,int y){
z=x-y;
System.out.println("The difference between the given
numbers:"+z);
}
}
public class My_Calculation extends Calculation{
public void
multiplication(int x, int y){
z=x*y;
System.out.println("The product of the given numbers:"+z);
}
public static void
main(String args[]){
int a=20, b=10;
My_Calculation
demo = new My_Calculation();
demo.addition(a,
b);
demo.Substraction(a, b);
demo.multiplication(a, b);
}
}
Compile and execute the above code as shown below
javac My_Calculation.java
java My_Calculation
After executing the program it will produce the following
result.
The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200
ไม่มีความคิดเห็น:
แสดงความคิดเห็น