Inheritance การสืบทอดคลาส

Slides:



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

Suphot Sawattiwong Array ใน C# Suphot Sawattiwong
Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
การจัดการความผิดพลาด
Chapter 7 ขอบเขตของตัวแปร Variable Scope.
Inheritance.
05_3_Constructor.
ฟังก์ชั่น function.
Object-Oriented Programming
การเขียนโปรแกรมภาษาจาวาตอนที่ ๓
ครั้งที่ 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)
คลาสและวัตถุ (3) (Class & Object). w5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 24, 25 as5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 23 2.
คลาสและวัตถุ (4) (Class & Object)
บทที่ 4 Method (1).
การสืบทอดคุณสมบัติ (Inheritance)
OOP (Object-Oriented Programming)
Generalization & Specialization
Lecture 9 Class (คลาส) To do: Hand back assignments
String Class มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 3 มิถุนายน 2550 Method of Class มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 22 มิถุนายน 2550 ความผิดพลาดที่พบ บ่อย มหาวิทยาลัยเนชั่น.
บทที่ 8 อาร์เรย์.
บทที่ 6 เมธอด.
JAVA PROGRAMMING PART IV.
หลักการวิเคราะห์และออกแบบระบบฐานข้อมูล
แถวลำดับ (array) ง40202 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
โปรแกรมภาษาจาวาเบื้องต้น Basic Java Programming 3(2-2-5)
เมธอดคือหน้าที่การงานของวัตถุให้เรียกใช้
ความสัมพันธ์ระหว่างคลาส (Class Relationship)
Method of Class อ.สุพจน์ สิงหัษฐิต
สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา
การวิเคราะห์และออกแบบระบบเชิงวัตถุ (OOAD)
Lec03 :: หลักการเชิงออปเจ็ค (Object Oriented Concept)
Lec05 :: การสืบทอด (inheritance)
Object-Oriented Programming
Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai
บทที่ 3 Class and Object (2).
Java collection framework
Java Programming Java Structure and Datatype,Variable
BCS 121 บท 5 การโปรแกรมเชิงวัตถุ (Object-Oriented Programming)
สายอักขระ เขียนโปรแกรม Java เบื้องต้น.
Object Oriented Programming : OOP
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
TECH30201 Object-Oriented Programming
Class. ทบทวน Object ประกอบด้วย ชื่อ Attributes -> คุณลักษณะ Methods -> การกระทำ ให้ลองเขียน Object โดยใช้รูปแบบดังนี้ ชื่อ Attributes Methods.
Inheritance และ Encapsulation.  การสร้างหรือพัฒนาคลาสใหม่จากคลาสเดิมที่ มีอยู่แล้ว  คลาสใหม่จะนำแอตทริบิวต์และเมธอดของ คลาสเดิมมาใช้  เป็นการถ่ายทอดคุณสมบัติจากคลาสหนึ่งสู่อีก.
Object-Oriented Programming
เครื่องมือที่ใช้ JUnit4.8.1 on Eclipse SDK3.5.2 ขึ้นไป
เมธอดคือหน้าที่การงานของวัตถุให้เรียกใช้
คอนสตรัคเตอร์ (Constructor)
การจัดการกับความผิดปกติ
chapter 2 - Construction and destruction - Overloading method
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
Chapter 6 Abstract Class and Interface
บทที่ 3 การสืบทอด (Inheritance)
Inheritance and Method Overriding
Method and Encapsulation
Class Inheritance and Interfaces.
การเขียนโปรแกรมคอมพิวเตอร์ แบบภาษาเชิงวัตถุ
ใบสำเนางานนำเสนอ:

Inheritance การสืบทอดคลาส

การนำ Code กลับนำมาใช้ใหม่ การนำ Code กลับนำมาใช้ใหม่ คือ การใช้ Code ที่มีอยู่แล้วมาสร้างคลาสใหม่ซึ่งอาจจะเป็นการสืบทอดจากคลาสหลัก (Inheritance) ที่ได้นำมาเป็นส่วนประกอบคลาสใหม่ที่สร้าง การสืบทอดจะเป็นการนำ Code เดิมกลับมาใช้อีกครั้ง โดยที่เราไม่ต้องเขียนใหม่ ทำให้ประหยัดเวลาและถ้า Code นั้นได้มีการตรวจสอบข้อบกพร่องอย่างดีแล้วยิ่งทำให้ช่วยลดเวลาในการตรวจสอบ Code อีกครั้ง

การนำคลาสกลับมาใช้อาจจำแนกได้เป็น 4 วิธี คือ 1. นำโปรแกรมที่เขียนเก็บไว้มาใช้ 2. เขียนใหม่จากข้อมูลที่มีอยู่ 3. นำคลาสมาใช้ในลักษณะ Composition 4. นำคลาสกลับมาใช้ภายใต้การสืบทอดคุณสมบัติ (Inheritance)

การสืบทอดคุณสมบัติ (Inheritance) คือ การใช้คลาสที่มีอยู่แล้วมาสร้างเป็นคลาสใหม่ (คลาสย่อย) โดยการสืบทอด วิธีการนี้ เราสามารถใช้คุณสมบัติต่างๆของคลาสเดิม เช่น ตัวแปร เมธอด คอนสตักเตอร์ หรืออื่นๆ ทั้งหมดที่คลาสเดิมมีอยู่แล้วได้ โดยไม่ต้องมีการแก้ไขใดๆ รวมทั้งยังสามารถเพิ่มเติมคุณสมบัติใหม่ๆ ที่คลาสเดิมไม่มีได้อีกด้วย เราเรียกคลาสที่มีอยู่ว่าคลาสหลัก (Superclass) และคลาสใหม่ที่สืบทอดว่า คลาสสืบทอด หรือ คลาสลูก (Subclass)

การถ่ายทอดแบบลำดับชั้น (Hierarchical Class) - การสืบทอดไม่ได้จำกัดเพียงระหว่าง superclass และ subclass เท่านั้น sub class สามารถเป็น superclass ของ class อีกหนึ่งได้ การเขียนแผนภาพแสดงความสัมพันธ์ นิยมเขียนเป็นแผนผังแบบต้นไม้ (Tree)

แผนผังแบบต้นไม้ (Tree) Class สัตว์ Class สัตว์ปีก Class สัตว์เลื้อยคลาน Class สัตว์บก Class สัตว์น้ำ

การ Inheritance สามารถทำได้ 2 ลักษณะ คือ 1. Single Inheritance คือ การที่ subclass ได้รับการถ่ายทอดคุณสมบัติมาจาก Superclass เพียงคลาสเดียวClass A และ Class B Class A Class B

2. Multiple Inheritance คือการที่ subclass ได้รับการถ่ายทอดคุณสมบัติต่างๆ มาจาก Superclass มากกว่า 1 คลาส Class A Class B Class C

หลักในการสร้างการสืบทอด - สร้าง class หลักขึ้นมา 1 class แล้วกำหนดให้มีคุณสมบัติต่างๆ ซึ่งเป็นคุณสมบัติโดยรวม ที่ class อื่นๆ จำเป็นต้องมี - จากนั้นจึงสร้าง class คลาสอื่นขึ้นมา เพื่อรับการถ่ายทอดคุณสมบัติทั้งหมดจาก class หลักมาโดยอัตโนมัติ โดยไม่ต้องสร้างขึ้นใหม่ - สามารถสร้างคุณสมบัติอื่นๆ นอกเหนือจาก class หลักขึ้นมาเองได้

การสร้าง Superclass และ Subclass Superclass จะสร้างเหมือนกับการสร้าง Class ทั่วไป แต่การสร้าง Subclass จะระบุคำว่า “extends” ร่วมด้วยเพื่อให้ทราบว่า Subclass จะใช้คุณสมบัติจาก Superclass ชื่ออะไร รูปแบบดังนี้ subclass_name คือ ชื่อของคลาสใหม่หรือคลาสลูก superclass_name คือ ชื่อของคลาสที่สืบทอดหรือคลาสแม่ class subclass_name extends ชื่อ superclass_name

การสร้าง Superclass และ Subclass (ต่อ) class A { int x ; } class B extends A { int y ; } ทำการสร้าง instance จากคลาสทั้ง 2 A a = new A() ; B b= new B() ;

Example Superclass 1 A B class A{ void printA(){ System.out.println("A"); } class B extends A{ void printB() { System.out.println("B"); public class inheritance{ public static void main(String[] args) { A m = new A(); B n = new B(); m.printA(); n.printA(); n.printB(); } A B

Example Superclass 2 class A{ int x = 1; public class inheritance1{ } class B extends A{ int y = 3; class C extends B{ int z = 4; public class inheritance1{ public static void main(String[] args) { A o = new A(); System.out.println (0.x); B p = new B(); System.out.println (p.x+ “,”+p.y); C m = new C(); System.out.println (m.x+m.y+m.z); } 1 1,3 8

การเข้าถึงด้วย access modifier การป้องกันการเรียกใช้ภายใน Superclass การเข้าถึงด้วย access modifier public ระบุที่ method หรือ variable แสดงว่า class ใดๆ สามารถ access ได้ private ระบุที่ method หรือ variable สามารถใช้ access ได้เพียงใน class นั้นเท่านั้น subclass ไม่สามารถ access ได้ protected method หรือ variable สามารถ access เมื่อเป็นสมาชิกของ class หรือ subclass

การป้องกันการเรียกใช้ภายใน Superclass (ต่อ)

Example 1 class A{ protected int x = 10; private int w = 5; } class B extends A{ int y; void Mul() { y = x*w; System.out.println (y); public class Test{ public static void main(String[] args) { B m = new B(); m.Mul(); } Compile Error / private

การใช้ keyword super ใช้สำหรับการทำงานใน Subclass ซึ่งมีประโยชน์ 2 ประการ คือ 1. เพื่อเรียกใช้สมาชิกของ Subclass และ Superclass ที่ใช้ชื่อสมาชิกเดียวกัน รูปแบบ super.member เช่น super.x=x; super.r=r;

การใช้ super เรียกสมาชิกของ Superclass public class super1{ public static void main(String[] args) { B m = new B(5,8); m.show(); } class A{ int x; } class B extends A{ int x; B(int a,int b) { super.x = a; x = b; } void show(){ System.out.println("x in superclass : "+super.x); System.out.println("x in subclass : "+x); x in superclass : 5 x in subclass : 8

การใช้ keyword super (ต่อ) 2. Subclass สามารถเรียกใช้ Constructor Method ของ Superclass โดยไม่จำเป็นต้องสร้าง Constructor ของตนเองขึ้นมาใหม่ (Constructor จะไม่ถูกสืบทอดจากการ inherit ด้วย extends) รูปแบบ super(argument) เช่น super(r)

การใช้ super เรียก Constructorของ Superclass1 class A{ A(String s){System.out.println(s);} } class B extends A{ B() { super("Hello"); System.out.println("Good Boy"); public class super_constru{ public static void main(String[] args) { B m = new B(); Hello Good Boy

การใช้ super เรียก Constructorของ Superclass2 class A{ int a,b; A(int a, int b){ this.a = a; this.b = b; } class B extends A{ int c; B(int c) { super(0,0); this.c = c; public class super_constru2{ public static void main(String[] args) { B m = new B(5); System.out.println("a = "+m.a+ " b = " +m.b+ " c = "+m.c); } a=0 b=0 c=5

Inheritance Assessments Refer a difference variable from class C x this.x super.x ((B)this).x ((A)this).x super.super.x class A { int x; .. } class B extends A { class C extends B { x in class C x in class C x in class B x in class B Inheritance Assessments Define A class as super-class which has one element named “X”. B Class extends A Class and also defines an element named “X”. C Class extends B Class and also defines an element named “X”. We can refer to all hidden variable from Class C as following “x” means element “x” in C class “this.X” means element “x” in C class “super.x” means element “x” in B class “((B)this).x means element “x” in B class , Note : (B) refers to object casting from “C” class to “B” class “((A)this).x means element “x” in A class , Note : (A) refers to object casting from “C” class to “A” class “super.super.x” means “x” element in A class How this happen? x in class A x in class A

Inheritance Solutions B ((A)this).x B A [x] ((B)this).x Inheritance Solution Once we are instantiate an object from C class, An internal implementation of C class in memory space maintains the class hierarchy which a super-class inside a sub-class as above picture. A Class is inside B class and B class is inside C class. Therefore, we can do object casting easily. Object casting helps us to scope out the object which one we want to refer to. this.x C [x] [x] Class Diagram Memory Space

Shadowing ถ้าเรากำหนด data member ในคลาสลูกมีชื่อเหมือนกับ data member ในคลาสแม่ ชื่อของลูกจะบัง(shadow)ชื่อในคลาสแม่ class A {int x = 1;} class B extends A {float x = 2.0f;} class shadowing { public static void main(String args[]) { B b = new B(); A c = new A(); System.out.println(b.x); System.out.println(c.x); } 2.0 1

แบบฝึกหัด Point2D x,y : int Point2D(x:int,y:int) Point2D(x:int) z : int Point3D(x:int,y:int,z:int) Point3D(z:int) Point3D() Test2D3D Main():void

Class Point2D - Point2D(x:int,y:int) ใช้ set ค่า x y - Point2D(x:int) เรียก constructor Point2D(x:int,y:int) มาใช้ กำหนดค่า เป็น (x,0); - Point2D() เรียก constructor Point2D(x:int,y:int) มาใช้ กำหนดค่าเป็น (0,0)

Class Point3D - Extends จาก Point2D - Point3D(x:int,y:int,z:int) ใช้ set ค่า x y z (x,y เรียกใช้ constructor จาก Point2D (x:int,y:int) - Point3D(z:int) ใช้ set ค่า z และเรียก ใช้ constructor จาก Point2D(x:int,y:int) กำหนดค่า เป็น (0,0); - Point3D() เรียก constructor Point3D(x:int,y:int,z:int) มาใช้ กำหนดค่าเป็น (0,0,0)

ผล RUN x = 0 y = 0 x = 5 y = 0 x = 5 y = 10 x = 0 y = 0 z = 0