slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Class Design in Java Overloading Programming with Multiple Classes Inheritance Inheritance and Access Control PowerPoint Presentation
Download Presentation
Class Design in Java Overloading Programming with Multiple Classes Inheritance Inheritance and Access Control

Loading in 2 Seconds...

play fullscreen
1 / 60

Class Design in Java Overloading Programming with Multiple Classes Inheritance Inheritance and Access Control - PowerPoint PPT Presentation


  • 125 Views
  • Uploaded on

:: OOP :: Object Oriented Programming Lec10 :: Overloading By Nattapong Songneam http://www.siam2dev.com Information technology Rajabhat pranakhon university. Class Design in Java Overloading Programming with Multiple Classes Inheritance Inheritance and Access Control.

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 'Class Design in Java Overloading Programming with Multiple Classes Inheritance Inheritance and Access Control' - ura


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
slide1

:: OOP :: Object Oriented ProgrammingLec10 :: OverloadingBy Nattapong Songneamhttp://www.siam2dev.comInformation technologyRajabhat pranakhon university

slide2
Class Design in Java Overloading Programming with Multiple Classes Inheritance Inheritance and Access Control

Object Oriented Programming

Nattapong Songneam

slide3

publicvoid deposit(double amount);

publicvoid deposit(int amount);

publicvoid deposit(double amount, double interest);

publicboolean deposit(double amount);

Overloading Methods

  • การประกาศเมทธอดซ้ำซ้อน (Overloading Methods)
    • คือ วิธีการเชิงวัตถุ ที่มีไว้เพื่อนำชื่อเมทธอด (Methods Name) กลับมาใช้ใหม่ (reuse)
  • ภาษาโปรแกรมจาวาสนับสนุน Overloading Methods โดย
    • อนุญาตให้ประกาศเมทธอดที่มีชื่อเดียวกันซ้ำกันได้ แต่มีเงื่อนไขดังนี้
      • ชนิด หรือ จำนวน หรือ ลำดับของ argument จะต้องต่างกัน
      • return type ของเมทธอดจะเหมือนกัน หรือแตกต่างกันก็ได้
slide4

public BankAccount (double initAmount) {/*…*/ }

public BankAccount (String customerName){/*…*/ }

public BankAccount ( ) { /*…*/ }

public BankAccount (double initAmount, String customerName) {/*…*/ }

Overloading Constructors

  • การประกาศคอนสตรัคเตอร์ซ้ำซ้อน (Overloading Constructors)
    • คือ วิธีการเชิงวัตถุ ที่มีไว้เพื่อเพิ่มความยืดหยุ่นให้กับการสร้างวัตถุ กรณีที่ไม่สามารถกำหนดข้อมูลเริ่มต้นที่แน่นอน ในขณะสร้างวัตถุ
  • ภาษาโปรแกามจาวาสนับสนุน Overloading Constructors โดย
    • อนุญาตให้ประกาศคอนสตรัคเตอร์ที่มีชื่อเดียวกันซ้ำกันได้ โดยมีเงื่อนไขดังต่อไปนี้
      • ชนิดหรือ จำนวน หรือ ลำดับของ argument จะต้องต่างกัน
slide5

การกำหนดคอนสรัคเตอร์ซ้ำการกำหนดคอนสรัคเตอร์ซ้ำ

ซ้อน มีประโยชน์ในกรณีที่

ไม่สามารถกำหนดค่าจำนวน

เงินฝากเริ่มต้นเมื่อเปิดบัญชี

ทำให้การใช้งานโปรแกรม

มีความยืดหยุ่น

นำชื่อเมทธอดกลับมาใช้ไหม่

โดยระบุ “ชนิด” ของ Argument

เป็นประเภทข้อมูลที่แตกต่างกัน

An Example of Overloading

  • public class OverLoadedBankAccount {
  • private double balance;
  • public OverLoadedBankAccount( ) {
  • balance = 0.0;
  • }
  • public OverLoadedBankAccount(double intBalance) {
  • balance = initBalance;
  • }
  • public void deposit(int amount) {
  • balance = balance + amount;
  • }
  • public void deposit(double amount) {
  • balance = balance + amount;
  • }
  • }
slide6

BankAccount Example

publicclass OverLoadedAccountTester {

publicstaticvoid main(String[] args) {

BankAccount myAccount =

new BankAccount2();

BankAccount yourAccount =

new BankAccount2(100.0);

myAccount.deposit(5000.50);

myAccount.withdrawn(2000);

System.out.println("my balance:"

+myAccount.getBalance());

yourAccount.deposit(300.50);

yourAccount.withdrawn(200);

System.out.println("your balance:”

+ yourAccount.getBalance());

}

}

public class BankAccount2 {

private double balance;

public BankAccount2( ) {

balance = 0.0;

}

public BankAccount2(double intBalance) {

balance = initBalance;

}

public void deposit(int amount) {

balance = balance + amount;

}

public void deposit(double amount) {

balance = balance + amount;

}

:

OverLoadedTester.java

OverloadedBankAccount.java

slide8

Aggregation

Association Name

Direction indicator

Multiplicity

Class Diagram with Multiple Classes

Customer

BankAccount

account

- firstName : String

- balance : double

- lastName : String

1

- account : BankAccount

+

BankAccount(initBalance:double)

+ getBalance : double

+

Customer(f:String, l:String)

+ deposit(amt : double)

+ getFirstName : String

+ withdraw(amt : double)

+ getLastName : String

+ setAccount( acct:BankAccount)

+ getAccount( ) : BankAccount

Class Diagram of “Customer.java” and “BankAccount.java”

slide9

Customer Class

public class Customer {

private String firstName;

private String lastName;

private BankAccount account;

public Customer(String f, String l) {

this.firstName = f;

this.lastName = l;

this.account = null;

}

public String getName() {

return (this.firstName + " " + this.lastName);

}

public BankAccount getAccount() { returnthis.account; }

publicvoid setAccount(BankAccount acct) { this.account = acct; }

}

slide10

BankAccount Class

publicclass BankAccount {

privatedouble balance = 0.0;

public BankAccount(double amount) {

balance = amount;

}

publicvoid deposit(double amount) {

balance = balance + amount;

}

publicvoid withdrawn(double amount) {

balance = balance - amount;

}

publicdouble getBalance() {

return balance;

}

}

slide11

Programming with Multiple Classes

publicclass TestBanking {

publicstaticvoid main(String[] args) {

Customer cust = new Customer("Joe","Goodman");

cust.setAccount(new BankAccount(3000.0););

System.out.println("customer : " + cust.getName()

+ " : open account with balance = "

+ cust.getAccount().getBalance() + " baht.");

cust.getAccount().deposit(1250.25);

System.out.println("customer : " + cust.getName()

+ " : deposit 1250.25 baht :"

+ " current balance = "

+ cust.getAccount().getBalance() + " baht.");

}

}

slide12

cust

Customer

firstName=“John”

lastName=“Goodman”

account=null

getName

getAccount

setAccount

Programming with Multiple Classes

Object Diagram of

“TestBanking.java”“Customer.java”

and “BankAccount.java”

TestBanking

main

Class Diagram

MyDate.java

After Line 3

slide13

acct

cust

Customer

acct

acct

firstName=“John”

BankAccount

BankAccount

lastName=“Goodman”

balance=3000.0

balance=3000.0

account=null

account=acct

getName

deposit

deposit

getAccount

withdraw

withdraw

setAccount

getBalance

getBalance

Programming with Multiple Classes

TestBanking

main

Executing Line 4

Class Diagram

MyDate.java

slide14

cust

Customer

acct

firstName=“John”

BankAccount

lastName=“Goodman”

balance=3000.0

account=acct

getName

deposit

getAccount

withdraw

setAccount

getBalance

Programming with Multiple Classes

TestBanking

main

After Line 4

Class Diagram

MyDate.java

slide15

cust

Customer

acct

firstName=“John”

BankAccount

lastName=“Goodman”

balance=3000.0

balance=4250.25

account=acct

1250.25

getName

deposit

getAccount

withdraw

setAccount

getBalance

Programming with Multiple Classes

TestBanking

deposit(1250.25)

main

Executing Line 6

Class Diagram

MyDate.java

slide16

Programming with Multiple Classes

cust

Customer

acct

firstName=“John”

BankAccount

lastName=“Goodman”

balance=4250.25

account=acct

getName

deposit

getAccount

withdraw

setAccount

getBalance

TestBanking

main

After Line 6

Class Diagram

MyDate.java

slide17

Customer

BankAccount

account

- firstName : String

- balance : double

- lastName : String

*

+

BankAccount(initBalance:double)

- account : BankAccount []

+ getBalance : double

+

Customer(f:String, l:String)

+ deposit(amt : double)

+ getFirstName : String

+ withdraw(amt : double)

+ getLastName : String

+ setAccount( acct:BankAccount)

+ getAccount( ) : BankAccount

“account” is an array of BankAccount

Multiplicity

Class Diagram with Multiple Classes

Class Diagram of “Customer.java” and “BankAccount.java”

slide19

Inheritance

  • การรับถ่ายทอดคุณสมบัติ (Inheritance)
    • หมายถึง การที่คลาสหนึ่งๆ รับถ่ายคุณสมบัติ (inherit) ทั้งค่าคุณลักษณะ (Attribute) และพฤติกรรม (Method) มาจากอีกคลาสหนึ่ง
    • แต่ไม่รวมถึง คอนสตรัคเตอร์ (Constructor)
slide20

รับถ่ายทอดคุณสมบัติ (inherit)

Inheritance

Class Diagram of “BankAccount” class and “SavingsAccount” class

slide21

public class Employee {

public String name;

public double salary;

public MyDate birthDate;

public String getDetails( ) { … }

}

Subclassing

  • พิจารณาคลาส Employee
    • เราสามารถสร้างวัตถุที่มีคลาสเป็นพนักงาน ได้โดยการกำหนดคลาส “Employee”
    • ถ้าเราต้องการสร้างคลาสของ “Manager” ที่ยังคงคุณสมบัติเป็น “Employee” คนหนึ่ง แต่มีคุณสมบัติบางอย่างเพิ่มเติม
slide22

public class Manager {

public String name;

public double salary;

public MyDate birthDate;

public String department;

public String getDetails( ) { … }

}

Subclassing

  • พิจารณาคลาส Manager
    • โครงสร้างคลาส “Manager” กับ “Employee” ซ้ำซ้อนกัน
    • เราใช้วิธีการเชิงวัตถุสร้างคลาสใหม่ จากคลาสเดิมที่มีอยู่แล้ว วิธีการนี้เราเรียกว่า “Subclassing”
slide23

Subclassing

  • UML Diagram
  • การสร้างคลาสใหม่จากคลาสเดิมที่มีอยู่แล้ว สนับสนุนแนวคิด ของการนำ Source Code กลับมาใช้ใหม่
slide24

Inheritance

  • การรับถ่ายทอดคุณสมบัติ (Inheritance)
    • หมายถึง การที่คลาสหนึ่งๆ รับถ่ายคุณสมบัติ (inherit) ทั้งค่าคุณลักษณะ (Attribute) และพฤติกรรม (Method) มาจากอีกคลาสหนึ่ง
    • แต่ไม่รวมถึง คอนสตรัคเตอร์ (Cosntructor)
  • คือการที่ class ที่ต่างกันมี Attributes และ Methods ที่เหมือนกัน
slide25

Single Inheritance

  • Single Inheritance
    • หมายถึง การที่คลาสหนึ่งๆ รับถ่ายทอดคุณสมบัติ (inherit) ทั้ง Attribute และ Method มาจากอีกคลาสหนึ่ง
    • เราเรียกว่าคลาส “Manager” รับถ่ายทอดคุณสมบัติ (inherit) มาจาก คลาส “Employee”
slide26

Multiple Inheritance

  • Multiple Inheritance
    • หมายถึง การที่คลาสหนึ่งๆ รับถ่ายทอดคุณสมบัติ (inherit) ทั้งค่าคุณลักษณะ และพฤติกรรมมาจากคลาสมากกว่า 1 คลาส
  • ภาษาจาวา
    • ไม่สนับสนุนการทำ Multiple Inheritance
    • แต่สามารถรับสืบทอดคุณสมบัติจากหลายคลาสได้โดยใช้ “Interface”
slide27

public class Employee {

public String name;

public double salary;

public MyDate birthDate;

public String getDetails( ) { … }

}

Java Inheritance

  • UML Diagram
  • จาวา

public class Manager

extends Employee {

public String department;

}

slide28

Defining Extending Class in Java

  • การกำหนดคลาสที่รับคุณสมบัติสืบทอดในภาษาจาวา สามารถทำได้ดังนี้

<modifier> class child-class

extends parent-class {

:

}

  • ตัวอย่าง

public class Manager extends Employee {

publicString department;

}

slide29

“super” and “this” keyword

  • “this” keyword
    • ใช้อ้างอิงถึงคลาสปัจจุบัน
    • สามารถใช้อ้างอิงถึง Attribute หรือ Method ของคลาสปัจจุบัน ได้โดยใส่ . แล้วตามด้วยชื่อ Attribute หรือ ชื่อ Method
  • “super” keyword
    • ใช้อ้างอิงถึง superclass ของคลาสปัจจุบัน
      • super( ) อ้างอิงถึง constructor ของ superclass
      • super.method( ) อ้างอิงถึง method ของ superclass
slide30

Top-Middle-Bottom (1)

class Top {

public Top( ) { System.out.println("Top()"); }

}

class Middle extends Top {

public Middle( ) { System.out.println("Middle()"); }

}

class Bottom extends Middle {

public Bottom( ) { System.out.println("Bottom()"); }

}

public class Tester1 {

public static void main(String[] args) {

new Bottom();

}

}

slide31

Top-Middle-Bottom (2)

class Top {

public Top( ) { System.out.println("Top()"); }

}

class Middle extends Top {

public Middle( ) { super( ) ; System.out.println("Middle()"); }

}

class Bottom extends Middle {

public Bottom( ) { super( ); System.out.println("Bottom()"); }

}

public class Tester2 {

public static void main(String[] args) {

new Bottom();

}

}

slide32

Overriding Methods

  • subclass/child class สามารถเปลี่ยนแปลงพฤติกรรม ที่รับถ่ายทอด (inherit) มาจาก superclass/parent class ได้
  • subclass สามารถกำหนด Method ที่มีหน้าที่/พฤติกรรม ต่างจาก Method ของ superclass ได้แต่ต้องมีสิ่งต่อไปนี้ที่เหมือนกัน
    • Method Name
    • Return Type
    • Argument list
slide33

Overriding Method (1)

public class Employee {

publicString name;

public double salary;

publicString birthDate;

public Employee(String n, double s, MyDate bd) {

name = n;

salary = s;

birthDate = bd;

}

public String getDetails( ) {

return "name:"+name+",salary:"+salary

+"bd:"+birthDate.toString();

}

}

slide34

Overriding Methods (2)

public class Manager extends Employee {

publicString department;

public Manager(String n, double s, MyDate bd, String dept) {

name = n;

salary = s;

birthDate = bd;

department = dept;

}

public String getDetails( ) {

return "name:"+name+",salary:"+salary

+"bd:"+birthDate.toString() +

+", department:"+this.department;

}

}

slide35

Super & Overriding Methods

public class Manager extends Employee {

publicString department;

public Manager(String n, double s, MyDate bd, String dept) {

name = n;

salary = s;

birthDate = bd;

department = dept;

}

public String getDetails( ) {

return super.getDetails()

+", department:"+this.department;

}

}

slide36

Super & Overriding Methods

public class Manager extends Employee {

publicString department;

public Manager(String n, double s, MyDate bd, String dept) {

super(n, s, bd);

department = dept;

}

public String getDetails( ) {

return super.getDetails()

+", department:"+this.department;

}

}

slide37

TestCompany

public class TestCompany {

publicstatic void main(String[] args) {

Employee jeff = new Employee( "Jeffrey"

, 3000.0

, new MyDate(2, 3, 1970) );

Manager rob = new Manager(" Robert"

, 5000.0

, new MyDate(3, 4, 1965)

, ”Sales");

System.out.println(jeff.getDetails( ));

System.out.println(rob.getDetails( ));

}

}

“TestCompany.java”

slide38

jeff

rob

Employee

Manager

name=“Jeffrey”

jeffdate

robdate

name=“Robert”

Salary=1000.0

MyDate

MyDate

Salary=5000.0

birthday=jeffdate

day=2;

birthday=Robdate

day=3;

getDetails

month=3;

month=4;

department=“Sales”

year=1970;

year=1965;

setDate

setDate

getDetails

toString

toString

Employee & Manger Example

TestCompany

main

Class Diagram

MyDate.java

slide39

Access Control

  • การควบคุมการเข้าถึงข้อมูล (Access Control)
    • คือ วิธีการเชิงวัตถุ ที่ภาษาจาวามีไว้เพื่อ ใช้เขียนโปรแกรมสนับสนุนคุณสมบัติ Encapsulation และ Information Hiding
    • การระบุค่า Access Control Specifier เป็นการควบคุมการเข้าถึงข้อมูล โดยจะใช้ระบุก่อนหน้า ตัวแปร ค่าคงที่เมทธอด และคลาส
    • ค่า Access Control Specifier ได้แก่
      • public- เปิดให้เข้าถึงข้อมูลได้จากทุกๆที่
      • private- เปิดให้เข้าถึงข้อมูลได้ภายในขอบเขตที่กำหนด
      • protected- เปิดให้เข้าถึงข้อมูลได้จากการสืบทอดคุณสมบัติ
slide40

public

ประกาศการเข้าถึงข้อมูล

ของคอนสตรัคเตอร์ของ

คลาสเป็นpublicเพื่อให้

ผู้ขอใช้บริการจากวัตถุที่

ถูกสร้างขึ้นจากวัตถุนี้

สามารถสร้างวัตถุนี้ได้

ประกาศการเข้าถึงข้อมูล

ของตัวแปรภายในคลาส

เป็นprivateเพื่อให้สามารถ

เข้าถึงได้จากภายในคลาส

ประกาศการเข้าถึงข้อมูล

ของเมทธอดเป็นpublic

เพื่อให้เมทธอดของคลาส

สามารถให้บริการแก่ผู้ขอ

ใช้บริการนอกขอบเขตของ

คลาส

Note: กรณีที่ประกาศการเข้าถึง

ข้อมูลของคลาสเป็นpublicคลาสนั้น

จะต้องถูกบันทึกในไฟล์ที่มือชื่อเดียวกับ

คลาส “BankAccout.java”แยกจาก

ไฟล์ที่ระบุผู้สร้างวัตถุจากคลาส หรือ

ขอรับบริการจากคลาสนี้

An Example of Access Control

  • class BankAccount {
  • private double balance;
  • public BankAccount(double initAmount) {
  • balance = initAmount;
  • }
  • public void deposit(double amount) {
  • balance = balance + amount;
  • }
  • public void withdrawn(double amount) {
  • balance = balance - amount;
  • }
  • public int getBalance() {
  • return balance;
  • }
  • }
slide41

Inheritance & Access Control

  • พิจารณา
  • การระบุค่าการเข้าถึงข้อมูล (Access Control) ให้เป็น public ทำให้คลาสอื่นๆ ทุกคลาส สามารถเข้าถึง Attributes ของคลาส Employee ได้
  • ถ้าต้องการให้เฉพาะคลาส Manager สามารถเข้าถึง Attributes ของ Employee จะทำอย่างไร?
slide42

protected

Inheritance & Access Control

  • พิจารณา
  • สามารถกำหนดเข้าถึงข้อมูล (Access Control) ให้สามารถเข้าถึงได้ผ่านทางการสืบทอดคุณสมบัติเท่านั้น
    • ทำได้โดยระบุค่า Access Control Specifierเป็น protected
slide43

Employee & Manager Example

public class Employee {

protectedString name;

protecteddouble salary;

public String getDetails( ) {

return ("name:"+name+ ”, salary:"+salary);

}

}

public class Manager extends Employee {

privateString department;

public String getDetails( ) {

return super.getDetails( ) + ", departmentt:"+department);

}

}

slide44

“Point” Class

public class public class Point {

protectedint x,y;

public Point() {

setPoint(0, 0);

}

public Point(int a, int b) {

setPoint(a, b);

}

public void setPoint(int a, int b) {

x = a;

y = b;

}

publicint getX() { return x; }

publicint getY() { return y; }

publicString toString() { return "("+x+","+y+")"; }

}

slide45

“Circle” Class

public class Circle extends Point {

protecteddouble radius;

public Circle() {

setRadius(0.0);

}

public Circle(double r, int a, int b) {

super(a , b);

setRadius(r);

}

publicvoid setRadius(double r) { radius = r; }

publicdouble getRadius() { return radius; }

publicdouble area() { return Math.PI * radius * radius; }

publicString toString() {

return "Center = "+"("+ x +","+ y +")"

+"; Radius = "+ radius;

}

}

slide46

“Cylinder” Class

public class Cylinder extends Circle {

protected double height;

public Cylinder() { setHeight(0); }

public Cylinder(double r, double h, int a, int b) {

super(r, a , b);

setHeight(h);

}

publicvoid setHeight(double h) { height = h; }

publicdouble getHeight() { return height; }

publicdouble area() {

return 2 * super.area() +2 * Math.PI * radius * height;

}

publicString toString() {

return super.toString()+ "; Height = " + height;

}

}

slide47

“TestInheritance” Class

public class TestInheritance {

public static void main(String[] args) {

Cylinder c = new Cylinder(5.7, 2.5, 12, 23);

System.out.println("X coordinate is "+ c.getX() +

"\nY coordinate is "+ c.getY() +

"\nRadius is "+ c.getRadius() +"\nHeight is ”+

c.getHeight() +"\nCylinder Area = "+ c.area());

c.setHeight(10);

c.setRadius(4.25);

c.setPoint(2,2);

System.out.println("\n\nThe new Location : "+

"\nX coordinate is "+ c.getX() +

"\nY coordinate is "+ c.getY() +

"\nRadius is "+ c.getRadius() +"\nHeight is ”+

c.getHeight() + "\nCylinder Area = "+ c.area());

}

slide49

Object Diagram of TestInheritance

TestInheritance

main

c

Cylinder

x = 12

radius = 5.7

y = 23

height = 2.5

getX

setRadius

getY

setHeight

getRadius

setPoint

getHieght

area

toString

slide50

Specialization

  • Subclass/Child Class รับถ่ายทอดคุณสมบัติ (inherit) ทั้ง Attributes และ Methods มาจาก Superclass/Parent Class

Employee

Manager

slide51

Generalization

  • เป็น flip-side ของ Specialization
  • การที่ class ที่ต่างกันมี Attributes และ Methods ที่เหมือนกัน

IS - A

Employee

Manager

slide52

Point

Circle

Square

Cylinder

Sphere

Box

Cubic

Class Hierarchies

  • ลูกศรใน Class Hierararchies แสดงความสัมพันธ์ของการรับถ่ายทอดคุณสมบัติ
    • Cylinder extends Circle
    • Circle extends Point
slide53

Animal

IS-A

Reptile

Bird

Mammal

IS-A

Snake

Lizard

Eagle

Dog

Bat

IS-A Relationships

  • การถ่ายทอดคุณสมบัติเป็นคุณลักษณะแบบ transitive
    • SnakeIS-AReptile และ ReptileIS-AAnimal
    • นั่นคือ SnakeIS-AAnimal
slide54

Animal

Flying Creature

Bird

Mammal

Mosquito

Bird

Bat

Eagle

Dog

Bat

Eagle

Adopting a Design

  • การออกแบบ Class Hierarchies ที่เหมาะสม เป็นสิ่งสำคัญการการออกแบบระบบเชิงวัตถุ
  • Alternatives Hierarchies ขึ้นกับระบบที่ต้องการออกแบบ

หรือ

slide55

เหมือนกับ

public classEmployeeextendsObject {

...

}

public classEmployee {

...

}

The “Object”Class

  • ในภาษาจาวา
    • คลาส “Object” เป็นคลาสบนสุดของ คลาสทั้งหมดที่ประกอบกันขึ้นเป็น Class Hierarchies
    • คลาสที่ประกาศ โดยไม่ใช้คำเฉพาะ “extends” ระบุการสืบทอดคุณสมบัติจากคลาสใดๆ ถือว่าเป็นการละ “extends Object” ไว้
slide56

Methods defined in “Object”Class

  • Methods ที่ถูกกำหนดไว้ในคลาส “Object” ให้คลาสที่รับสืบทอดคุณสมบัติสามารถเรียกใช้ หรือทำการ Overriding Methods เหล่านี้ ได้ ตัวอย่างเช่น
    • equals(Object object) : Indicates whether some other object is "equal to" this one.
    • toString() : Returns a string representation of the object
    • Clone() : Creates and returns a copy of this object.

...etc.

  • ดูรายละเอียดใน Java & API Language Specification
slide57

Customer

BankAccount

HAS-A

Two Approaches to reuse Software

  • Inheritance
    • IS-A relationship
  • Composition
    • HAS-A relationship

IS-A

slide58

Benefits of Inheritance

  • Avoiding redundancies
    • Source Code ในส่วนที่เหมือนกันจะถูกเขียนขึ้นเพียงครั้งเดียว
  • Code reuse & Code Sharing
    • สามารถนำไปใช้ใหม่ได้ (reuse) ได้โดยการรับถ่ายทอดคุณสมบัติ
    • สามารถสร้างคลาสใหม่จากคลาสเดิมที่มีอยู่แล้วได้
  • Reduced code size
    • Source Code ถูกเขียนขึ้นเพียงครั้งเดียว และถูกนำไปใช้ใหม่ได้ไม่จำกัด
slide59

Costs of Inheritance

  • Message-passing overhead
    • เนื่องจากอนุญาตให้มี Code Reuse ทำให้ต้องมีการส่งต่อความต้องการไปยังคลาสอื่นๆ ที่สัมพันธ์กันด้วยการถ่ายทอดคุณสมบัติ
  • Execution Speed
    • ความเร็วในการประมวลผลช้าลง เนื่องจากต้องส่งต่อความต้องการไปขอรับบริการจากคลาสอื่นๆ
  • Program Complexity
    • เพิ่มความซับซ้อนของโปรแกรม
slide60

Summary

  • Overloading Methods and Constructors
  • Programming with multiple classes
  • Inheritance
  • Overriding Methods and Constructor
  • Access control and inheritance