识别关系(关联)—物件如何取用其他物件的服务.ppt
《识别关系(关联)—物件如何取用其他物件的服务.ppt》由会员分享,可在线阅读,更多相关《识别关系(关联)—物件如何取用其他物件的服务.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、識別關係(關聯)物件如何取用其他物件的服務n關係是類別之間的連接,指的是提供系統內的訊息往來路徑,意即物件如何取用其它物件的服務。n關係是指類別之間在意義上的關係,具體來說分為下列情況:q類別A對類別B送出訊息(A使用B的方法)。q類別A產生類別B(A使用new B()。q類別A的屬性值是類別B或是類別B的集合(A是B的父類別或者A是B的元件)。q類別A有著一種訊息,其參數為類別B。n關係也可以視為一種物件。例如q某個人對銀行產生存款這個關聯之後,就會產出帳戶。q帳戶是一種物件,本身有專屬的屬性和方法。1關係分類n一般化(繼承關係)q表示將擁有共同性質的部份抽取出來的動作,通常針對類別來進行。
2、在一般化當中,父類別具有子類別的共同特性。qB是A的一種B是A的一種特殊情況這種關係被抽取出來就叫一般化。而能夠從A去繼承那一個函式或屬性,則叫做繼承。n組合(Composition)與聚合(Aggregation)q聚合:類別A是由類別B所構成,但是類別B可以離開類別A而獨立存在。例如,公司與員工的關係;資料夾與檔案的關係。q組合:是將聚合強化而成,在組合裡面,部分的類別是不能從整體的類別切割出來。例如,公司與部門的關係是如此。n連結q不同類別之間的1對1、1對多或多對多關係。2類別的繼承 n繼承(Inheritance)是物件導向程式設計的重要觀念,繼承是指宣告類別繼承現存類別的部分或全部
3、的成員變數和方法、新增額外的成員變數和方法或覆寫和隱藏繼承類別的方法或變數。n類別的繼承關係可以建立類別架構,在UML類別關係中,繼承是一般關係(Generalization)。例如:類別Student是繼承自類別Person。3類別的繼承n類別架構:繼承不只可以多個子類別繼承同一個父類別,而且可以擁有很多層的繼承。如下圖所示:nTruck、Car和Motorcycle類別是兄弟類別,因為擁有相同的Vehicle父類別。n當然我們可以繼續繼承類別Car,類別SportsCar和Jeep也是類別Vehicle的子類別,不過並不是直接繼承的子類別。4類別的繼承-父類別(一般化)n在Java宣告繼承
4、的子類別前,我們需要先有一個父類別來繼承。稱為一般化,例如:學生與老師的類別宣告如下:Class Student private int score;private int id;private String name;private double height;public Student()public Student(int id,String n,double h,int score)public void studentInfo()public void setID(int id)public void setName(String n)public void setHeight(d
5、ouble h)Class Teacher private int teacherNO;private int id;private String name;private double height;public Teacher()public Teacher(int id,String n,double h)public void teacherInfo()public void setID(int id)public void setName(String n)public void setHeight(double h)5類別的繼承-父類別(一般化)n父類別Person定義個人的基本資
6、料,類別宣告如下所示:class Person private int id;private String name;private double height;public void setID(int id)public void setName(String n)public void setHeight(double h)public void personInfo()6類別的繼承-繼承的語法n在Java語言是使用extends關鍵字來宣告類別繼承存在的類別,其宣告語法,如下所示:class 子類別名稱 extends 父類別名稱 /額外的成員變數和方法 n上述語法表示擴充父類別的原型
7、宣告。n以學生Student子類別的宣告為例,其類別宣告如下所示:class Student extends Person private int score;public Student()public Student(int id,String n,double h,int score)public void studentInfo()範例程式:http:/mail.tajen.edu.tw/reler/object/Ch11_1_2.javan那麼老師Teacher子類別該如何宣告?7類別的繼承UML類別圖8物件建構過程9類別的繼承繼承的存取限制n子類別可以繼承父類別的所有成員變數和方法
8、,但是在存取時仍然有一些限制,如下所示:q子類別不能存取父類別宣告成private的成員變數和方法。q父類別的建構子不屬於子類別的方法,所以子類別並不能繼承父類別的建構子,只能呼叫父類別的建構子。10類別的繼承-使用protected修飾子宣告nJava存取修飾子protected是指宣告的成員方法或變數可以在同一類別、其子類別或同一套件存取,其存取權限介於public和private之間。nJava語言的存取修飾子public、private和protected擁有不同的存取權限範圍:qpublic:擁有全域範圍,任何類別都可以存取,包含子類別。qprivate:只可以在同一個類別存取,不可
9、以在子類別存取。qprotected:可以在同一個類別、其子類別或同一套件中存取,包含不同套件的子類別。q沒有使用存取修飾子:沒有使用存取修飾子:預設範圍是同一個類別和套件中存取,但不包含不同套件的子類別。protected則包含不同套件的子類別,所以其存取範圍比protected還小。11類別的繼承-使用protected修飾子宣告n例如,在程式範例Ch11_1_2.java中,重新宣告Person的屬性為protected,則Student子類別即可直接取用不需要透過呼叫父類別的方法。Class Person protected int id;protected String name;p
10、rotected double height;.Class Student extends Personprivate int score;public Student(int id,String n,double h,int score)this.id=id;name=n;height=h;this.score=score;範例程式:http:/mail.tajen.edu.tw/reler/object/Ch11_1_3.java12類別的繼承-覆寫和隱藏父類別的方法n繼承的父類別方法如果不符合需求,在子類別可以宣告同名、同參數列和傳回值的方法來取代父類別繼承的方法,稱為覆寫(Overri
11、de),或稱為覆蓋。n不過,物件的實例方法不能取代宣告成static的類別方法。如果父類別擁有類別方法,在子類別需要宣告同樣的類別方法來取代它,稱為隱藏(Hide)。13類別的繼承-覆寫和隱藏父類別的方法n在父類別Person的類別方法和成員方法需要被隱藏和覆寫,其類別宣告如下所示:class Person public static void printClassName()public void personInfo()n子類別Student繼承自父類別Person,其類別宣告如下所示:class Student extends Person public static void prin
12、tClassName()public void personInfo()14類別的繼承-覆寫和隱藏父類別的方法n在UML類別圖示並不會特別標示覆寫方法,如下圖所示:15類別的繼承-隱藏父類別的個體變數n在子類別除了覆寫父類別的成員方法和隱藏類別方法外,子類別也可以隱藏父類別的成員變數。n子類別只需變數名稱相同,就算變數的資料型態不同,也一樣可以隱藏父類別的成員變數。n例如:父類別Person的成員變數id是宣告成public的整數資料型態,其類別宣告如下所示:class Person public int id;.n在子類別Student是繼承自父類別Person,其類別宣告如下所示:clas
13、s Student extends Person private String id;16類別的繼承-隱藏父類別的成員變數-UML類別圖n在UML類別圖示並不會特別標示隱藏變數,在父和子類別都會有同名但型態和存取修飾子不同的成員變數id,如下圖所示:17類別的繼承-使用父類別的建構子n在Java子類別並不能繼承父類別的建構子,只能使用super關鍵字呼叫父類別的建構子;同理,在子類別覆寫的方法和隱藏的成員變數,也可以使用super來呼叫和存取。n例如:在父類別Person擁有建構子,其類別宣告如下所示:class Person public static int count=0;public
14、int id;public String name;public Person()public Person(int id,String name)public void personInfo()18類別的繼承-使用父類別的建構子n在子類別Student是繼承自父類別Person,如下所示:class Student extends Person private int score;public Student(int id,String n,String no,int score)super(id,n);/Person(int id,String n);public void personI
15、nfo()super.personInfo();System.out.println(姓名(父):+super.name);System.out.println(字號(父):+super.id);19類別的繼承-繼承關係下的Constructor執行順序 n先將所有變數設為內定值。對數值型態來說,其值為0;對reference來說,其值為null;對boolean來說,其值為false。n呼叫父類別的constructor。如果子類別Constructor裡沒有指定父類別的Constructor,則使用父類別沒有參數的Constructor。n執行變數宣告的初始化動作。n執行自己的constr
16、uctor。n如果要指定父類別其他的constructor,則必須在子類別的constructor的第一行使用關鍵字super來處理。20類別的繼承-繼承關係下的Constructor執行順序class A1 private int a;public A1()a=100;public A1(int a)this.a=a;public class B1 extends A1 private int b;public B1()/Compiler add super()here,系統自動新增 b=110;public B1(int b)/*若有super,則必須放在第一行,連變數宣告也不能擺在sup
17、er前面*/super(b);/系統會增加哪一個建構子?b=b+10;21抽象類別(abstract class)n使用時機q當某類別只是在定義一些抽象概念,並不是想利用此類別實作一個物件。換句話說,它並不能用來建立物件實體,抽象類別擁有眾多類別的共同部分,主要的目是是作為其它類別的父類別22抽象類別(abstract class)-(圖例說明)n類別架構中的父類別是哺乳類(Mammal),Mouse、Human和Dog類別是繼承自Mammal類別,因為老鼠、人和狗都屬於哺乳類動物,我們可以使用Mouse、Human和Dog類別建立模擬老鼠、人和狗等物件。n事實上,並沒有任何動物叫哺乳類,所以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 识别 关系 关联 物件 如何 取用 其他 服务
限制150内