+ All Categories
Home > Documents > Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where...

Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where...

Date post: 19-Dec-2015
Category:
View: 214 times
Download: 1 times
Share this document with a friend
25
Course Introduction CLASS II
Transcript
Page 1: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

Course Introduction

CLASS II

Page 2: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-2

Previous studies

• What is constructor?• How to use this()?

– Where I can call this()?– Can I call this() twice in one constructor?– What is the meaning between this() and

this.XX?

Page 3: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-3

Previous studies

• How to use Inheritance?• How to use super()?

– Where can I call super()?– What is the meaning between super() and

super.XX?• What is polymorphism?

Page 4: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

Synopsis of Polymorphism

• The polymorphism principle• Polymorphism means that an operation

may behave differently (in different classes).

• There are two kinds of polymorphism– static (overloading)– dynamic

• Example– GeomFigure (display(), remove(), position())

• Rectangle• Circle

1-4

Page 5: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

再談 inheritance

• 矩型– 我們先擁有這個 class,並且進行了系統開發

• 正方形– 之後有了正方型的需求,再寫了一個正方形的 class– Square “IS A” kind of rectangle

• Reuse?– Q1: 你有沒有程式”砍掉重練”的經驗 ?– Q2: 你有沒有”再造輪子”的經驗 ?

1-5

Page 6: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

Class Rectangle

class Rectangle {    double width;    double height;            public double getHeight() {        return height;    }    public void setHeight(double height) {        this.height = height;    }    public double getWidth() {        return width;    }    public void setWidth(double width) {        this.width = width;    }   }

1-6

Page 7: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

Class Square

class Square extends Rectangle {    public void setHeight(double height) {        super.setHeight(height);        super.setWidth(height);    }        public void setWidth(double width) {        super.setHeight(width);        super.setWidth(width);    }}

1-7

Page 8: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

void g(Rectangle r) {    r.setWidth(5);    r.setHeight(4);    if (r.getWidth() * r.getHeight() != 20) {        throw new RuntimeException();    }}

//some other placeRectangle square = new Square();g(square);

1-8

Page 9: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

Liskov Substitution Principle (LSP)• Functions that use pointers or

references to base classes must be able to use objects of derived classes without knowing it

• Very difficult problem!!– Further study: OOAD– Software design principals

• Please google it if you are interested in it• One of the principals

– Prefer Composition over inheritnace– Why? Can you give an example?

1-9

Page 10: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-10

類別( Class )架構

• 「類別架構」( Class Hierarchy )– 將整個類別關係的樹狀結構繪出來– 繼承的子類別可以有多層

• 如果父類別不只一個,即繼承多個類別,稱為「多重繼承」( Multiple Inheritance )。

Page 11: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-11

類別( Class )類別關係

• 類別關係是指不同類別間的關係,例如:– 繼承是一種 Is-a 的類別關係

• Nissan” 是”車子的一種 (Is-a)– 「成品和零件」( Whole-Part )關係,即 Part-of 和 Has-a 關係。• 輪胎是車子的”一部份” (Part-of)• 車子”有”輪胎 (Has-a)

Page 12: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-12

「 is a 」和「 has a 」

• 在描述類別時,常以「 is a 」和「 has a 」描述類別的父類別和類別中的資料成員。「 is a 」描述句通常會導出類別的父類別,而「 has a 」則是會導出類別中的資料成員。 – A man is a human that has a name, a father, and a

mother.

public class Man extends Human {Name theName;Father theFather;Mother theMother;

}

Page 13: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-13

Wrong program

// 建立一個 Vehicle 的類別class Vehicle {

Vehicle(String x){

System.out.println(“Vehicle’s Constructor”);

}

public void drive(){

System.out.println(“I’m driving”);

}

}

Page 14: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-14

Wrong program// 建立一個 Car 的類別 extend Vechicle

class Car extends Vehicle {

}

public class app{

public static void main(String[] args){

Car aCar=new Car();

}

}

Why this program is wrong??

Page 15: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-15

How to fix it!

// 建立一個 Vehicle 的類別class Vehicle { Vehicle(){

System.out.println(“Vehicle’s Constructor”); }

Vehicle(String x){

System.out.println(“Vehicle’s Constructor”);

}

public void drive(){

System.out.println(“I’m driving”);

}

}

Page 16: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-16

How to fix it!!// 建立一個 Car 的類別 extend Vechicle

class Car extends Vehicle {

Car(){

Super(“X”);

}

}

public class app{

public static void main(String[] args){

Car aCar=new Car();

}

}

}

Page 17: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-17

How to fix it!!// 建立一個 Car 的類別 extend Vechicle

class Car extends Vehicle {

Car(String x){

Super(x);

}

}

public class app{

public static void main(String[] args){

Car aCar=new Car(“x”);

}

}

}

Page 18: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-18

Example

class Circle{

double radius;

void setRadius(double radius){

this.radius=radius;

} void showRadius(){

System.out.println(“ 半徑為” +radius); } double showArea(){

return Math.PI*Math.pow(radius,2); }

}

Page 19: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-19

API search

• Search java api document• For example pow(a,b)

– Key in java api pow

Page 20: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-20

Example

public class Application{

public static void main(String argv[]){

Circle aCircle;

aCircle = new Circle();

aCircle.setRadius(12.0);

aCircle.showRadius();

System.out.println(“aCircle 的面積等於” + aCircle.showArea());

}

}

Page 21: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-21

How to know new object’s hashCode?

public class RealWorld {

public static void main(String[] args){

Car aCar=new Car(); // 產生一個 Car 的實體String x=aCar.toString();

//Name+”@”+hashCode()

System.out.println(x);

Car bCar=aCar;

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

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

}

}

Page 22: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-22

Example detail

Circle aCircle;

aCircle = new Circle();

aCircle 的記憶體 location l-value:0x1111指向 Circle Type 的 reference 的 variable

aCircle l-value:0x1111Circle 某一個 instance其 l-value:0x3333

aCircle = new Circle();

aCircle l-value:0x1111aCircle r-value:0x3333

Circle 某一個 instance其 l-value:0x3333

Page 23: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-23

Example detail

bCircle=aCircle;

Circle 物件aCircle

bCircle

bCircle=null;

Circle 物件aCircle

bCircle

Problem: aCircle=null; 結果會如何 ?

Page 24: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-24

物件的空間配置

class Vehicle{ // 定義的類別int wheel; // 定義一個實體變數

}Vehicle newCar1 = new Vehicle();// 實體化一個類別Vehicle newCar2 = new Vehicle();// 再實體化一個類別Vehicle rCar = newCar1; // 只是一個參考

Page 25: Course Introduction CLASS II. 1-2 Previous studies What is constructor? How to use this()? –Where I can call this()? –Can I call this() twice in one constructor?

1-25

變數型態

• 種類– 基本型態 (Primitive Type)

• 8 種– 參考型態 (Reference Type)

• 基本型態– 整數、浮點數、字元、或布林值

• 參考型態– 由物件所組成的型態

• So, what is “static”?– We have not explained it, let us do it now.


Recommended