Class Inheritance and Interfaces.

Slides:



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

C# เบื้องต้น ก่อนการเขียนเกมด้วย XNA
Object-Oriented Programming IUP02 At Exceep camp.
คืออะไร? คือ queue ที่ access element ตามความสำคัญของตัว element นั้น
Object and classes.
Inheritance.
05_3_Constructor.
Object-Oriented Programming
Object Oriented Programing
การเขียนโปรแกรมภาษาจาวาตอนที่ ๓
ครั้งที่ 7 Composition.
หลักการเชิงวัตถุ อาจารย์ศิริพร ศักดิ์บุญญารัตน์
Selected Topics in IT (Java)
Network programming Asst. Prof. Dr. Choopan Rattanapoka
การสืบทอด (Inheritance)
คลาสและวัตถุ (2) (Class & Object)
คลาสและวัตถุ (4) (Class & Object)
บทที่ 4 Method (1).
การสืบทอดคุณสมบัติ (Inheritance)
OOP (Object-Oriented Programming)
Generalization & Specialization
Lecture 9 Class (คลาส) To do: Hand back assignments
Inheritance การสืบทอดคลาส
String Class มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 3 มิถุนายน 2550 Method of Class มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 22 มิถุนายน 2550 ความผิดพลาดที่พบ บ่อย มหาวิทยาลัยเนชั่น.
บทที่ 6 เมธอด.
JAVA PROGRAMMING PART IV.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
ความสัมพันธ์ระหว่างคลาส (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 Programming Java Structure and Datatype,Variable
Object Oriented Programming : OOP
การสืบทอด (inheritance)
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
TECH30201 Object-Oriented Programming
Inheritance และ Encapsulation.  การสร้างหรือพัฒนาคลาสใหม่จากคลาสเดิมที่ มีอยู่แล้ว  คลาสใหม่จะนำแอตทริบิวต์และเมธอดของ คลาสเดิมมาใช้  เป็นการถ่ายทอดคุณสมบัติจากคลาสหนึ่งสู่อีก.
Object-Oriented Programming
Variable, Data type, Expression, Operators Data input, Data output
chapter 2 - Construction and destruction - Overloading method
Chapter 6 Abstract Class and Interface
บทที่ 3 การสืบทอด (Inheritance)
Object and classes.
Basic Java Programming
เขียนโปรแกรม Java เบื้องต้น
Inheritance and Method Overriding
พื้นฐานโปรแกรมภาษาจาวา (Overview of Java Programming Language)
Object-Oriented Programming Paradigm
Chapter 5 การจัดการข้อผิดพลาด (Exception Handling)
อาจารย์ชนิดา เรืองศิริวัฒนกุล หลักสูตรสาขาวิชาเทคโนโลยีสารสนเทศ
ตัวแปรและการคำนวณ Variables and Calculation
Class Diagram.
Object Roles and the Importance of Polymorphism
Object-Oriented Programs Design and Construction
Abstract Class and Interface
Starting JAVA : JAVA PROGRAMMING (การ โปรแกรมภาษาจาวา) มัลลิกา เกลี้ยงเคล้า | SC1419.
Java Translation Object and Class ในมุมมองคอมพิวเตอร์ Objects หรือ Instances หมายถึงวัตถุที่กำเนิดตัวตนจริงๆจากต้นแบบที่กำหนดโดยคลาส Object.
Method and Encapsulation
Inheritance and Encapsulation
Inheritance Chapter 07.
Overload Method and Poly Morphism
การเขียนโปรแกรมคอมพิวเตอร์ แบบภาษาเชิงวัตถุ
Class Diagram.
ใบสำเนางานนำเสนอ:

Class Inheritance and Interfaces

การสืบทอด Inheritance เป็นการสร้าง class ใหม่จาก class ที่มีอยู่แล้ว เป็นแนวคิดที่สำคัญและทำให้โปรแกรมมีขีดความสามารถสูง ทุก class ที่กำหนดในจาวา จะสืบทอดจาก class ที่มีอยู่แล้ว การสืบทอด class อาจเป็นแบบ explicit หรือ implicit

Superclasses and Subclasses class B สืบทอดมาจาก class A Superclass : class A Subclass : class B subclass สืบทอดมาจาก superclass สามารถสร้าง data (attribute) และ method ใหม่ได้ ทำงานได้มากกว่า superclass superclass = parent class = base class subclass = child class = extended class = derived class

data และ method จาก Circle class radius: double +getRadius(): double +setRadius(radius: double): void +findArea(): double Cylinder length: double +getLength(): double +setLength(length: double): void +findVolume(): double Cylinder class สืบทอด data และ method จาก Circle class และ Cylinder class ยังมี data และ method ของตนเองด้วย

data และ method จาก Computer class manufacturer: String Processor: String ramSize: int diskSize: int +getRamSize(): int +getDiskSize(): int +toString(): String Laptop screenSize: double weight: double +getWeight() : double +getScreenSize():double Laptop class สืบทอด data และ method จาก Computer class และ Laptop class ยังมี data และ method ของตนเองด้วย

Keyword super super ใช้อ้างถึง super class ของ class ที่ปรากฏคำว่า super สามารถใช้ได้ 2 แบบ เรียก superclass constructor เรียก superclass method

การเรียก superclass method หรือ super(parameters); super() เรียก default constructor ของ superclass super(parameters) เรียก superclass constructor ที่มี parameters ที่ตรงกัน

จะต้องปรากฏที่บรรทัดแรกของ subclass constructor super() หรือ super(parameters) จะต้องปรากฏที่บรรทัดแรกของ subclass constructor ซึ่งเป็นวิธีเดียวที่จะเรียก superclass constructor ปกติจะละ super() เพราะ subclass constructor จะเรียก super() อยู่แล้ว ถ้าไม่มี explicited invoke

constructor ถูกใช้เพื่อสร้าง instance ของ class การสืบทอด properties(data หรือ attribute) และ methods คือ subclass ไม่สามารถสืบทอด constructor ของ superclass โดย constructor ของ subclass สามารถเรียกใช้ constructor ของ superclass โดยใช้ คำหลัก super ถ้าไม่มีการใช้คำหลัก super ใน subclass จะทำให้ default constructor ของ superclass ถูกเรียกโดยอัตโนมัติ

default constructor ของ superclass ถูกเรียกโดยอัตโนมัติ

x default constructor เรียก y default constructor

ถ้า constructor ของ superclass ไม่ใช่ default constructor subclass จะไม่สามารถใช้ constructor ของ superclass class x ไม่ได้กำหนด constructor ดังนั้น จึงใช้ default constructor default constructor ของ x จะเรียก default constructor ของ y โดยอัตโนมัติ แต่ไม่พบ ดังนั้นจึง compile ไม่ได้

เรียก default superclass constructor เรียก superclass constructor Circle(r)

การเรียก Superclass Methods คำหลัก super นอกจากใช้เพื่ออ้างถึง constructor ของ superclass แล้วยังสามารถใช้เพื่ออ้างถึง method ได้ super.method(parameters) class cylinder{ double findVolume() { return super.findArea() * length; } ในกรณีนี้ไม่จำเป็นต้องมี super เพราะ findArea() อยู่ใน Circle class และถูกสืบทอดโดย Cylinder class

Overriding Methods subclass ที่สืบทอด method จาก superclass บางครั้ง อาจจำเป็นต้องแก้ไขเปลี่ยนแปลง method ที่กำหนดใน super class method overriding คือ method ที่มีอยู่ใน superclass แล้วนำมาปรับปรุงแก้ไขเพิ่มเติมใน subclass โดย method signature ไม่เปลี่ยนแปลง

กรณีนี้จำเป็นต้องใช้คำหลัก super Overriding method กรณีนี้จำเป็นต้องใช้คำหลัก super

toString method การเรียก object.toString() จะคืนค่า string โดย default จะคืนค่า string ที่ประกอบด้วย ชื่อ class ของ object @ ที่อยู่ของ object

Overriding method Java compiler แปล CylinderA ใน println() ให้เป็น string ด้วยการเรียก toString() โดยอัตโนมัติ

protected modifier สามารถใช้กับ data และ method ใน class protected data และ protected method ในpublic class สามารถถูก access โดย class ต่างๆใน package เดียวกัน subclass ซึ่งอาจอยู่ใน package เดียวกัน หรือ package อื่น

package p1 package p2 public class C1 public class C2 extends C1 protected int x x สามารถถูกอ่านได้ public class C3 public class C4 C1 ob; ob.x สามารถถูกอ่านและแก้ไข C1 ob; ob.x ไม่สามารถถูกอ่านและแก้ไขได้

การใช้ modifiers กับความสามารถมองเห็นได้ - private - protected - public modifier เหล่านี้ จะเพิ่มความสามารถของ class หรือ class member ในการมองเห็น หรือเข้าถึงตามลำดับต่อไปนี้ private, ไม่มี modifier, protected, public

private ซ่อนสมาชิกของ class โดยสมบูรณ์ ไม่สามารถเข้าถึงจากภายนอก class ไม่มี modifiers อนุญาตให้เข้าถึงสมาชิกของ class ได้เฉพาะ สมาชิกจากทุก class ภายใน package เดียวกัน เรียกว่า package-private protected อนุญาตสมาชิกของ class ใน package เดียวกัน และ subclass จาก package อื่น เข้าถึงสมาชิกของ class public อนุญาตสมาชิกจากทุก class เข้าถึงสมาชิกของ class ได้

subclass สามารถ - override protected method ใน superclass เปลี่ยนความสามารถในการมองเห็น method ดังกล่าว จาก protected เป็น public subclass ไม่สามารถ เปลี่ยนความสามารถในการมองเห็นให้น้อยลงได้

final modifier สามารถใช้ได้กับ การประกาศค่าคงที่ ตัวอย่าง final int VAT = 0.07; final double PI = 3.14159; การกำหนดให้ class ไม่สามารถเป็น parent class ตัวอย่าง final class public final class Math extends Object public final class String extends Object public final class StringBuffer extends Object

Abstract Classes เป็น class ที่ - มีลักษณะทั่วไปและมีการกำหนดคุณสมบัติน้อยที่สุด ถูกออกแบบเพื่อเป็นต้นแบบของ subclass - ไม่มี instance หรือ object Abstract Method มีแต่ method signature การใช้งานอยู่ที่ subclass

Object Cylinders -length: double +getLength(): double +setLength(length:double): void +findVolumn(): double Object Geometric -color: String -filled: boolean +getColor() : String +setColor(String color): void +isFilled(): boolean +setFilled(boolean filled): void +findArea(): double +findPerimeter(): double Circles -radius: double +getRadius():double +setRadius(radius:double): void Rectangle -width: double -length: double +getWidth(): double +setWidth(width:double): void +getLength(): double +setLength(length: double): void

Geometric

Geometric

public String toString() method toString ได้ถูกกำหนดไว้ใน Object class และได้มีการปรับปรุงใน Circle, Rectangle, และ Cylinder class public String toString() abstract methods findArea และ findPerimeter ได้กำหนดไว้ใน Geometric class และได้นำมาใช้ใน Circle และ Rectangle class

abstract method ไม่สามารถอยู่ใน nonabstract class ถ้า subclass ของ abstract superclass ไม่ได้ใช้ทุก abstract methods จะต้องประกาศให้ subclass เป็น abstract หรือ อีกนัยหนึ่ง nonabstract subclass ที่สืบทอดมาจาก abstract class จะต้องใช้ทุก abstract method แม้ว่าใน subclass ไม่มีการใช้งาน

abstract class ไม่สามารถสร้างตัวอย่างหรือวัตถุ แต่อาจจะมี constructor ที่ถูกเรียกใช้โดย constructor ของ subclass ตัวอย่าง constructor ของ Geometric ถูกเรียกใช้โดย Circles class

class ที่ประกอบด้วย abstract method ต้องเป็น abstract abstract class อาจไม่มี abstract method subclass สามารถเป็น abstract ได้ แม้ว่า superclass ไม่ได้เป็น abstract ตัวอย่าง Object class เป็น concrete class แต่ Geometric class ซึ่งเป็น subclass สามารถเป็น abstract ได้

subclass สามารถ override method จาก superclass ให้เป็น abstract และ subclass ก็ต้องกลายเป็น abstract ด้วย abstract class ไม่สามารถสร้าง object ได้ แต่สามารถใช้เป็นประเภทข้อมูลได้ ตัวอย่าง Geometric[] geo = new Geometric[10]

Polymorphism object ของ subclass สามารถเป็น object ของ superclass ได้ในขณะเดียวกัน ตัวอย่าง ถ้า method มีพารามิเตอร์ประเภท Geometric จะสามารถเรียกใช้ method กับ วัตถุประเภท Circle ได้ Circle object เป็นได้ทั้งวัตถุของ Circle และ วัตถุของ Geometric คุณลักษณะแบบนี้เรียกว่า polymorphism

Dynamic Binding method ที่กำหนดไว้ใน superclass สามารถนำมา override ใน subclass ได้ เมื่อมีการเรียกใช้ method ในช่วงของ runtime, Java Virtual Machine จะค้นหา method ที่จะกระทำการ เรียก ความสามารถนี้ว่า Dynamic Binding

การทำงานของ Dynamic binding สมมติ วัตถุ o เป็น ตัวอย่าง ของ class C1, C2, ..., Cn-1 และ Cn โดย C1 เป็น subclass ของ C2, C2 เป็น subclass ของ C3, ... Cn-1 เป็น subclass ของ Cn ดังนั้น Cn เป็น class ทั่วไปที่สุด C1 เป็น class พิเศษที่สุด ในจาวา Cn หมายถึง class Object ถ้าวัตถุ o เรียก method p JVM จะค้นหา method p ใน c1, c2, ... , cn-1 ตามลำดับ จนพบ เมื่อพบที่ class ใด การค้นหาจะหยุด และ จะมีทำงานตาม method p ที่พบในครั้งแรก

Polymorphism ยอมให้ใช้ method กับ วัตถุ ในรูปแบบหลากหลาย implicit casting Circles Rectangle Polymorphism ยอมให้ใช้ method กับ วัตถุ ในรูปแบบหลากหลาย เรียกว่า generic programming

ในขณะที่ compile compiler จะค้นหา matching method ตาม ประเภท จำนวน และลำดับของพารามิเตอร์ (method signature) ในช่วง runtime method อาจถูกใช้ในหลาย subclass JVM จะจัดการรวม method (binding method) ตามประเภทการเรียกใช้

Casting objects and the instanceof Operator อีกประเภทหนึ่งตามลำดับชั้นของการสืบทอด Geometric geoOb1 = new Circles(5); ให้เอาวัตถุวงกลมไปเก็บไว้ในตัวแปรประเภท Geometric  Circles c = geoOb1 ให้เอาวัตถุ geoOb1 ไปเก็บไว้ใน c ซึ่งเป็นตัวแปรประเภท Circles  Circles object เป็นตัวอย่างของ Geometric เสมอ แต่ Geometric ไม่จำเป็นต้องเป็นตัวอย่างของ Circles

แม้ว่า geoOb1 จะเป็น วัตถุประเภท Circles จริงๆ แต่ compiler จะไม่สามารถทราบได้ ดังนั้น เพื่อบอกให้ compiler ทราบว่า geoOb1 เป็นประเภท Circles จึงต้องใช้ explicit cast ดังนี้ Circles c = (Circles) geoOb1 การ cast จะสำเร็จ ถ้าวัตถุของ superclass เป็นตัวอย่างของ subclass มิฉะนั้น จะเกิด runtime exception