inheritance
Download
Skip this Video
Download Presentation
การสืบทอด ( inheritance)

Loading in 2 Seconds...

play fullscreen
1 / 70

inheritance - PowerPoint PPT Presentation


  • 127 Views
  • Uploaded on

การสืบทอด ( inheritance). Nerissa Onkhum. Outline. การสืบทอด การเข้าใช้แบบ protected พอลิมอร์ฟิซึม การสืบทอดในภาษาจาวา คลาส Object. การสืบทอด. การสืบทอด ( Inheritance ). ในการโปรแกรมเชิงวัตถุเป็นแนวความคิดที่เลียนแบบจาก การลืบทอดลักษณะของลูกมาจากพ่อและแม่

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' inheritance' - auberta


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
outline
Outline
  • การสืบทอด
  • การเข้าใช้แบบ protected
  • พอลิมอร์ฟิซึม
  • การสืบทอดในภาษาจาวา
  • คลาส Object
inheritance1
การสืบทอด (Inheritance)
  • ในการโปรแกรมเชิงวัตถุเป็นแนวความคิดที่เลียนแบบจากการลืบทอดลักษณะของลูกมาจากพ่อและแม่
  • การโปรแกรมเชิงวัตถุนำการลืบทอดมาใช้กับคลาสและอินเทอร์เฟส
  • การสืบทอดเกี่ยวข้องกับคลาส 2 คลาส คือคลาสแม่และคลาสลูก
  • คลาสแม่จะถ่ายทอดความสามารถและลักษณะให้กับคลาสลูก
  • คลาสแม่จะนำเสนอแนวความคิดที่กว้างและทั่วไป
  • คลาสลูกจะนำเสนอแนวความคิดที่เฉพาะเจาะจง หรือมีความสามารถเพิ่มเติมจากที่มีอยู่แล้วในคลาสแม่
slide5
สัตว์ต่างๆ
  • คลาสแมว
    • แอตทริบิวต์ ได้แก่ อายุ และ ความหิว
    • เมธอด ได้แก่ กิน() และ นอน()
  • คลาสปลา
    • แอตทริบิวต์ ได้แก่ อายุ ความหิว และชื่อ (เช่น ปลานีโม)
    • เมธอด ได้แก่ กิน() และ นอน()
  • คลาสลิง
    • แอตทริบิวต์ ได้แก่ อายุ และ ความหิว
    • เมธอดได้แก่ กิน() นอน() และเก็บลูกมะพร้าว()
slide6
แอททริบิวท์และเมธอดที่คล้ายกันแอททริบิวท์และเมธอดที่คล้ายกัน
slide7
การสืบทอด
  • แก้ปัญหาการเขียนโปรแกรมซ้ำซ้อนกันได้
  • เมธอดหรือแอตทริบิวต์ที่คลาสต่างๆ มีร่วมกันจะถูกนำไปใส่ในคลาสแม่
  • คลาสลูกจะสืบทอดเมธอดและแอตทริบิวต์คลาสแม่โดยอัตโนมัติ
  • การแก้ไขเปลี่ยนแปลงเมธอดในคลาสแม่จะทำให้คลาสลูกเปลี่ยนตามไปด้วย
slide8
คลาสสัตว์
  • แมว ปลา และลิง เป็นสัตว์ สัตว์ทุกตัวสามารถกินและนอนได้ เราจึงนำแอตทริบิวต์และเมธอดที่สัตว์ต่างๆมีร่วมกัน ไปใส่ในคลาสสัตว์

class สัตว์ {

// แอตทริบิวต์

อายุ;

ความหิว;

// เมธอด

กิน() {… }

นอน() {… }

}

slide9
การสืบทอด
  • รูปแบบ
    • classคลาสลูกextendsคลาสแม่
  • ตัวอย่าง

class แมว extends สัตว์ {

}

class ปลา extends สัตว์ {

}

class ลิง extends สัตว์ {

}

slide10
การทดสอบการสืบทอด
  • แต่งประโยคโดยใช้คำว่า “เป็น” เข้าช่วย
    • ลิงเป็นสัตว์
    • สัตว์เป็นลิง
    • ลิงไซบอร์ก เป็น ลิงและหุ่นยนต์
    • รถยนต์เป็นพาหนะ

class ลิง extends สัตว์

class รถยนต์ extends พาหนะ

slide11
การทดสอบการสืบทอด
  • แต่งประโยคโดยใช้คำว่า “เป็น” เข้าช่วย
    • เครื่องยนต์เป็นรถยนต์
      • รถยนต์มีเครื่องยนต์

class รถยนต์ extends พาหนะ{

เครื่องยนต์ // แอตทริบิวต์ห

}

slide12
วัตถุในคลาสลูกสามารถทำงานตามเมธอดของคลาสแม่ได้วัตถุในคลาสลูกสามารถทำงานตามเมธอดของคลาสแม่ได้

ลิง ล = new ลิง();

ล.กิน();

คลาสลิงไม่มีเมธอดใด ๆ ประกาศไว้

ล.กิน(); จึงไปทำงานตามเมธอด กิน()

ที่อยู่ในคลาสแม่ (คลาสสัตว์)

slide13
วัตถุในคลาสลูกสามารถทำงานตามเมธอดของคลาสแม่ได้วัตถุในคลาสลูกสามารถทำงานตามเมธอดของคลาสแม่ได้

ลิง ล = new ลิง();

ล.กิน();

สรุป คือ ถ้าคลาสลูกไม่ได้เขียนเมธอด กิน()

วัตถุในคลาสลูกจะเข้าไปเรียกใช้

เมธอดกินที่คลาสแม่

ดังนั้น การเปลี่ยนแปลงการทำงานของเมธอดในคลาสแม่ ทำให้การทำงานของลูกทุกคลาสเปลี่ยนแปลงตาม โดยอัตโนมัติ

slide14
เพิ่มเมธอดในคลาสลูก

class ลิง extends สัตว์ {

// เมธอดที่เพิ่มเข้ามา

เก็บลูกมะพร้าว() { … }

}

ลิง ล = new ลิง();

ล.เก็บลูกมะพร้าว();

สัตว์ ส = new สัตว์();

ส.เก็บลูกมะพร้าว();

คอมไพล์ผ่าน เพราะเรฟเฟอร์เรนซ์ของลิง สามารถเรียกใช้เมธอดของลิงได้

คอมไพล์ไม่ผ่าน สัตว์โดยทั่วไปไม่รู้วิธีเก็บลูกมะพร้าว

slide15
เพิ่มเมธอดในคลาสลูก

สรุป

  • วัตถุในคลาสลูกสามารถเรียกเมธอดจากคลาสแม่ได้
  • แต่วัตถุในคลาสแม่ ไม่สามารถเรียกเมธอดที่ถูกเขียนเพิ่มเติมในคลาสลูกได้
  • การเพิ่มความสามารถในคลาสลูก ทำให้การพัฒนาต่อยอดทำได้ง่ายขึ้น
    • ผู้เขียนโปรแกรมสามารถสร้างคลาสใหม่โดยการสืบทอดจากคลาสเดิม และเขียนเมธอดเพิ่มเติมลงในส่วนที่คลาสเดิมไม่มี
slide16
เพิ่มแอททริบิวท์ในคลาสลูกเพิ่มแอททริบิวท์ในคลาสลูก

class ปลา extends สัตว์ {

// แอตทริบิวต์ที่เพิ่มเข้ามา

ชื่อ;

}

  • สามารถประกาศแอตทริบิวต์เพิ่มเติมให้กับคลาสลูกได้
slide17
เพิ่มแอททริบิวท์ในคลาสลูกเพิ่มแอททริบิวท์ในคลาสลูก
  • ปกติจะไม่ให้คลาสอื่นเข้าถึงแอตทริบิวต์ได้โดยตรง
    • แอตทริบิวต์ จึงถูกประกาศการเข้าใช้เป็น private
    • การเข้าใช้แบบ private คลาสลูกก็ไม่สามารถเข้าใช้แอตทริบิวต์ได้
      • ตัวอย่างเช่น ถ้าแอตทริบิวต์ “อายุ” ของคลาสสัตว์เป็น private
      • คลาสแมวซึ่งเป็นคลาสลูกของสัตว์ จะไม่สามารถเข้าใช้แอตทริบิวต์ “อายุ” ได้
      • ถ้าอยากให้คลาสลูกใช้งานแอตทริบิวต์ของแม่ได้ ต้องเปลี่ยนระดับการใช้งานเป็น “protected”
slide18
เพิ่มแอททริบิวท์ในคลาสลูกเพิ่มแอททริบิวท์ในคลาสลูก
  • protected คือการกำหนดให้คลาสลูกละคลาสในแพ็จเกจเดียวกันสามารถเข้าใช้ได้
  • protected
    • เข้มงวดน้อยกว่า private
    • อิสระน้อยกว่าแบบ public

class สัตว์{

protected อายุ;

}

class ลิง{

ทำให้แก่(){

อายุ +=10;

}

}

slide19
เมธอดที่ชื่อซ้ำกับเมธอดในคลาสแม่เมธอดที่ชื่อซ้ำกับเมธอดในคลาสแม่

class ปลา extends สัตว์ {

// แอตทริบิวต์

ชื่อ;

// เมธอด

นอน() {

// วิธีการนอนของปลา

}

}

slide20
การโอเวอร์ไรด์เมธอด
  • คลาสสัตว์มีเมธอด นอน();
  • เขียนเมธอด นอน(); ซ้ำอีกในคลาสปลา
  • การเขียนเมธอดที่มีชื่อและพารามิเตอร์เหมือนกับ เมธอดเดิมที่มีอยู่ในคลาสแม่ เรียกว่า การโอเวอร์ไรด์ (override)
  • วัตถุในคลาสลูกได้รับคำสั่งให้เรียกใช้เมธอดที่ถูก โอเวอร์ไรด์วัตถุนั้นจะทำงานตามเมธอดที่เขียนในคลาสลูก
  • ปลา ป = new ปลา();

ป.นอน();

slide21
เรฟเฟอร์เรนซ์ของคลาสแม่สามารถอ้างถึงคลาสลูกได้เรฟเฟอร์เรนซ์ของคลาสแม่สามารถอ้างถึงคลาสลูกได้
  • ต้องการใช้งานวัตถุคลาสใด จะประกาศเรฟเฟอร์เรนซ์ของคลาสนั้น เช่น ถ้าต้องการใช้งานปลา
  • ปลา ป = new ปลา();
  • แต่ถ้าเป็นเรื่องการสืบทอด สามารถให้เรฟเฟอร์เรนซ์ของคลาสแม่อ้างถึงวัตถุในคลาสลูก
  • ตัวอย่างเช่น คลาสปลาสืบทอดคลาสสัตว์ ดังนั้น เรฟเฟอร์เรนซ์คลาสสัตว์อ้างถึงปลาได้
  • สัตว์ ส = new ปลา();
slide22
เรฟเฟอร์เรนซ์ของคลาสแม่สามารถอ้างถึงคลาสลูกได้เรฟเฟอร์เรนซ์ของคลาสแม่สามารถอ้างถึงคลาสลูกได้
  • สามารถสั่งให้วัตถุในคลาสลูก ทำงานได้โดยผ่านทาง เรฟเฟอร์เรนซ์ของคลาสแม่ได้
  • สัตว์ ส = new ปลา();

ส.นอน():

  • ถ้าใช้เรฟเฟอร์เรนซ์คลาสแม่อ้างถึงวัตถุคลาสลูก จะเรียกใช้ได้เฉพาะเมธอดที่มีในคลาสแม่เท่านั้น ไม่เช่นนั้นคอมไพล์จะไม่ผ่าน
  • สัตว์ ส = new ลิง()ว

ส.กิน();

ส.เก็บลูกมะพร้าว();

slide24
พอลิมอร์ฟิซึม

ส.นอน() สามารถตีความได้หลายแบบ ขึ้นอยู่กับวัตถุที่ ส อ้างถึง

slide25
ความหมายของโพลิมอร์ฟิซึมความหมายของโพลิมอร์ฟิซึม
  • poly แปลว่าหลายหรือมาก
  • morphism นั้นมาจากคำว่า morph ซึ่งแปลว่ารูปร่าง
  • รวมกันแล้วหมายถึงความสามารถที่สิ่งหนึ่งจะมีได้หลายรูปร่าง ซึ่งเมื่อใช้คำนี้กับการโปรแกรมเชิงวัตถุ ก็จะหมายถึงการที่คำสั่งแบบเดียวกันสามารถถูกแปลได้หลายแบบ
slide26
พอลิมอร์ฟิซึมกับการนำกลับมาใช้ใหม่
  • พอลิมอร์ฟิซึมสนับสนุน การนำกลับมาใช้ใหม่(reuse)
  • ถ้าเราได้เขียนโปรแกรมที่ใช้งานได้กับสัตว์ โปรแกรมของเราย่อมใช้ได้กับแมว ปลา และลิงนอกจากนั้นถ้ามีคนสร้างคลาสอีกัวน่าขึ้นมาใหม่ โปรแกรมที่เราเขียนก็สามารถใช้ได้กับคลาสอีกัวน่าเช่นกัน
slide28
คลาสรูปร่างและคลาสที่สืบทอดคลาสรูปร่างและคลาสที่สืบทอด
slide29
คลาสรูปร่าง
  • รูปร่างเป็นรูปที่อยู่ในระนาบสองมิติ
  • มีพื้นที่
    • เมธอด getArea() ใช้คำนวณหาพื้นที่ของรูปร่าง
  • มีสี
    • public enum Color { Red, Green, Blue }
    • เมธอด getColor()
slide30
คลาสรูปร่าง

public enum Color{

Red, Green, Blue

}

public class Shape {

private Color color;

public Shape() {

color = Color.Red;

}

public double getArea() {

return 0;

}

public void setColor(Color c) {

color = c;

}

public Color getColor() {

return color;

}

}

slide31
ทดสอบคลาสรูปร่าง

public class TestShape {

public static void main(String[] args) {

Shape s1 = new Shape();

System.out.println(s1.getColor());

System.out.println(s1.getArea());

Shape s2 = new Shape();

s2.setColor(Color.Blue);

System.out.println(s2.getColor());

System.out.println(s2.getArea());

}

}

slide33
คลาสสี่เหลี่ยมผืนผ้า

class Rectangle extends Shape{

private double width;

private double height;

public Rectangle(int w, int h){

width = w;

height = h;

}

public double getWidth(){

return width;

}

public double getHight(){

//ควรเติมอะไรตรงนี้

}

}

slide34
คลาสสี่เหลี่ยมผืนผ้า

class Rectangle extends Shape{

public double getArea() {

return width * height;

}

}

slide35
คลาสสี่เหลี่ยมผืนผ้า

class Rectangle extends Shape{

public String toString(){

String str = “Rectangle”;

str += “color = “ +getColor();

str += “width = “ +width;

str += “height = “ +height;

str += “area = “ +getArea();

return str;

}

}

slide36
ทดสอบคลาสสี่เหลี่ยม

class TestShape1

{

public static void main(String[] args)

{

Rectangle r = new Rectangle(3,4);

System.out.println(r);

System.out.println(r.toString());

}

}

tostring
เมธอด toString()

public class Rectangle extends Shape {

...

public String toString() {

String str = "Rectangle";

str += " color=" + getColor();

str += " width=" + width;

str += " height=" + height;

str += " area=" + getArea();

return str;

}

}

tostring1
เมธอด toString()
  • เป็นเมธอดที่ถูกโอเวอร์ไรด์จากคลาส Object
object1
คลาส Object
  • แม่ของทุกคลาส
  • เมธอดที่น่าสนใจ
    • toString() //ส่งค่าสตริงต่าง ๆ ในวัตถุที่สนใจ
    • equals() //ใช้เปรียบเทียบวัตถุ
    • clone() //ใช้โคลนนิ่งวัตถุ ตัวโคลนจะมีลักษณะเหมือนกับตัวจริงทุกประการ
    • hashCode() // จะส่งจำนวนเต็มที่เป็นรหัสแฮส รหัสใช้สำหรับการค้นหาอย่างรวดเร็ว
equals
เมธอด equals()

public boolean equals(Object otherObject) {

if (otherObject instanceof Rectangle) {

Rectangle otherRect = (Rectangle) otherObject;

boolean equalWidth = width == otherRect.width;

boolean equalHeight = height == otherRect.height;

return equalWidth && equalHeight;

}

return false;

}

hashcode
เมธอด hashCode()
  • จะส่งจำนวนเต็มที่เป็นรหัสแฮช เพื่อการค้นหาข้อมูลที่รวดเร็ว

public int hashCode() {

return (int) (width + height * 17);

}

clone
เมธอด clone()

สร้างวัตถุที่เหมือนกับวัตถุที่ได้รับข้อความ

public Object clone() {

Rectangle clone = new Rectangle(width, height);

return clone;

}

object2
ทดสอบเมธอดที่โอเวอร์ไรด์จากคลาส Object

public class TestRectangle3 {

public static void main(String[] args) {

Rectangle r1 = new Rectangle(2, 5);

System.out.println(r1);

System.out.println(r1.hashCode());

Rectangle r2 = new Rectangle(5, 2);

System.out.println(r1.equals(r2));

Rectangle r3 = (Rectangle) r1.clone();

System.out.println(r1.equals(r3));

}

}

slide45
สรุปเมธอดในคลาสสี่เหลี่ยมผืนผ้าสรุปเมธอดในคลาสสี่เหลี่ยมผืนผ้า
slide46
คลาสสี่เหลี่ยมจัตุรัสคลาสสี่เหลี่ยมจัตุรัส

Public class Rectangle extends Shape{

public Rectangle(double w, double h){

….

}

}

public class Square extends Rectangle {

public Square( double w) {

super(w,w);

}

...

}

เรียกใช้คอนสตรักเตอร์ในคลาส Rectangle

super
Super();
  • super() หมายถึง การเรียกใช้คอนสตรักเตอร์ในคลาสแม่
  • จากตัวอย่าง super(w,w) คือการเรียกใช้

Rectangle(double w, double h);

  • สาเหตุที่ใช้คำว่า super เพราะบางครั้งนิยมเรียกคลาสพื้นฐาน (คลาสแม่) ว่า super class และเรียกคลาสที่สืบทอด (คลาสลูก) ว่า subclass
slide48
คลาสสี่เหลี่ยมจัตุรัสคลาสสี่เหลี่ยมจัตุรัส

public class Square extends Rectangle {

public Square(double w){

super(w,w)

}

public String toString() {

String str = "Rectangle";

str += " color=" + getColor();

str += " width=" + getWidth();

str += " area=" + getArea();

return str;

}

}

เรียกจากคลาส Rectangle

เรียกจากคลาส Shape

เรียกจากคลาส Rectangle

เรียกจากคลาส Rectangle

slide50
การห้ามสืบทอด
  • ไม่สามารถถูกสืบทอดได้

public final class Square

ไฟนอลคลาส

Public class SquareChild extends Square

คอมไพล์ไม่ผ่าน

final class
final class
  • คลาสในแพ็จเกจ java.lang.*
    • Final class เช่น
      • String
      • StringBuffer
      • Math
      • System
      • Integer
      • Double
slide52
ไฟนอลเมธอด
  • ไม่สามารถถูกโอเวอร์ไรด์ได้

publicclassShape {

publicfinalColorgetColor() {

returncolor;

}

...

}

public class Rectangle extends Shape{

public Color getColor(){

return Color.Blue;

}

}

protected1
การเข้าใช้แบบ protected
  • คลาสลูกสามารถใช้เมธอดและแอททริบิวท์ที่มีการเข้าใช้แบบ protectedได้
  • คลาสที่อยู่ในแพ็คเกจเดียวกันก็สามารถใช้เมธอดและแอททริบิวท์ที่มีการเข้าใช้แบบ protected ได้
  • การเข้าใช้แบบนี้มีความเข้มงวดน้อยกว่าแบบprivate ซึ่งห้ามคลาสอื่นใดเข้าใช้ แต่ก็อิสระน้อยกว่าแบบpublic ที่ใครๆก็สามารถเข้าใช้ได้
slide55
คลาสวงกลม

public class Circle extends Shape {

protected double radius;

public Circle(double r) {

radius = r;

}

public double getRadius() {

return radius;

}

public double getArea(){

return Math.PI* radius * radius;

}

}

slide56
คำนวณพื้นที่ของวงแหวนคำนวณพื้นที่ของวงแหวน

public class Ring1 extends Circle {

public double getArea() {

double outerArea = Math.PI * radius * radius;

double innerArea = Math.PI * innerRadius * innerRadius;

return outerArea - innerArea;

}

...

}

slide57
คำนวณพื้นที่ของวงแหวนคำนวณพื้นที่ของวงแหวน

public class Ring2 extends Circle {

public double getArea() {

double outerArea = super.getArea();

double innerArea = Math.PI * innerRadius * innerRadius;

return outerArea - innerArea;

}

...

}

abstract class1
คลาสที่ประกาศขึ้นมาลอยๆ (AbstractClass)
  • เมธอด getArea() ในคลาส Shape ไม่ควรส่งค่าศูนย์หรือค่าใดๆกลับมา ทั้งนี้เพราะว่าเราไม่ทราบวิธีคำนวณหาพื้นที่ของวัตถุ Shape

public abstractdouble getArea();

  • เมธอดที่ถูกประกาศขึ้นมาลอยๆ (abstract) นี้ต้องอยู่ในคลาสที่เป็น abstract ด้วยเช่นกัน คลาส Shape เขียนใหม่ได้ดังนี้

public abstract class Shape {

public abstract double getArea();

...

}

abstract class2
การใช้งาน abstract class
  • ไม่สามารถสร้างวัตถุในคลาสนี้ได้

Shape s = new Shape();

  • แต่อ้างถึงวัตถุในคลาสลูกได้

Shape s;

s = new Rectangle(3,2);

s = new Square(5);

slide61
พอลิมอร์ฟิซึม

public class TestPolymorphism {

public static void main(String[] args) {

Shape shape;

shape = new Rectangle(10, 20);

System.out.println(shape.getArea());

shape = new Circle(10);

System.out.println(shape.getArea());

}

}

slide62
การนำมาใช้อีก

public class ShapeArray {

public static double sumArea(Shape[] shapes) {

double sum = 0;

for( Shape s : shapes) {

sum += s.getArea();

}

return sum;

}

}

slide63
การนำมาใช้อีก

Shape[] s = new Shape[3];

s[0] = new Triangle(10);

s[1] = new Rectangle(10,20);

s[2] = new Pentagon(20);

double d = ShapeArray.sumArea(s);

slide64

ข้อดีข้อเสียของการสืบทอดข้อดีข้อเสียของการสืบทอด

slide65
ข้อดีของการสืบทอด 
  • การนำกลับมาใช้ใหม่
    • ถ้าเราต้องการสร้างคลาสที่มีความสามารถคล้ายๆกับคลาสที่มีอยู่แล้ว
    • เราอาจจะใช้การสืบทอดแทนที่จะเขียนขึ้นมาใหม่หมด
  • ความเป็นมาตรฐานเดียวกัน
    • คลาสพื้นฐานเป็นการกำหนดโครงแบบในการระบุความสามารถของวัตถุในคลาสลูก
  • เข้าใจสาระสำคัญได้ง่าย
slide66
ข้อเสียของการสืบทอด
  • โปรแกรมทำงานช้าลง
    • มีค่าใช้จ่าย (overhead) ในค้นหาและเรียกใช้เมธอดของคลาสที่สืบทอด
    • แต่ค่าใช้จ่ายดังกล่าวถือว่าน้อยมากเมื่อเทียบกับประโยชน์ที่ได้รับจากการสืบทอด
  • โปรแกรมมีขนาดใหญ่ขึ้น
    • แต่หน่วยความจำราคาไม่แพง
  • ความซับซ้อนเพิ่มขึ้น
    • ผู้ใช้ต้องหาตามคลาสต่างๆ ที่อยู่ในผังการสืบทอดจนกว่าจะพบคลาสที่อิมพลีเมนต์เมธอดนั้น ปัญหาที่กล่าวถึงนี้มีชื่อว่าปัญหาลูกดิ่ง (Yo-yoproblem)
  • ออกแบบยาก
    • ต้องกำหนดต้องตัดสินใจ
    • แอตทริบิวต์ให้เป็น private หรือ protected
slide68
สรุป
  • การสืบทอดในภาษาจาวาใช้แนวความคิดเดียวกับการถ่ายทอดคุณลักษณะจากพ่อและแม่
  • คลาสลูกสืบทอดความสามารถจากคลาสแม่
  • การทดสอบการสืบทอดทำได้โดยการแต่งประโยคที่มีคำว่าเป็น
  • การสืบทอดทำให้เกิดการนำไปใช้ใหม่ได้
  • คลาสลูกสามารถใช้เมธอดในคลาสแม่ได้ ถ้าเมธอดนั้นเป็น public หรือ protected
slide69
สรุป
  • เมธอดที่ใช้กับคลาสแม่ได้ ก็สามารถใช้กับคลาสลูกได้
  • คลาสลูกสามารถโอเวอร์ไรด์เมธอดในคลาสแม่ได้
  • พอลิมอร์ฟิซึมคือการที่คำสั่งเดียวกันสามารถทำให้เกิดการทำงานที่ต่างกันขึ้นกับชนิดของวัตถุ
  • แอ็บสแตร็กต์เมธอดคือเมธอดที่ไมได้ระบุวิธีการทำงาน
  • แอ็บสแตร็กต์เมธอดต้องอยู่ในแอ็บสแตร็กต์คลาส
  • แอ็บสแตร็กต์คลาสเป็นเหมือนกับโครงที่กำหนดให้คลาสลูกต้อง อิมพลีเมนต์แอ็บสแตร็กต์เมธอด
ad