《信息系統(tǒng)開發(fā)》系統(tǒng)開發(fā)方法與工具演示文檔
《《信息系統(tǒng)開發(fā)》系統(tǒng)開發(fā)方法與工具演示文檔》由會員分享,可在線閱讀,更多相關(guān)《《信息系統(tǒng)開發(fā)》系統(tǒng)開發(fā)方法與工具演示文檔(77頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1/39,繼承,2,目錄,1 類的繼承2 終結(jié)類與終結(jié)方法3 抽象類4 類的組合,Java類的定義public abstract|final class 類名extends 父類名 implements 接口名 成員變量(域)定義 成員函數(shù)(方法)定義,3/39,4,1 類的繼承,類的繼承一種由已有的類創(chuàng)建新類的機制,是面向?qū)ο蟪绦蛟O(shè)計的基石之一通過繼承,可以根據(jù)已有類來定義新類,新類擁有已有類的所有功能Java只支持類的單繼承,每個子類只能有一個直接父類父類是所有子類的公共屬性及方法的集合,子類則是父類的特殊化繼承機制可以提高程序的抽象程度,提高代碼的可重用性,5,基類(base class)也稱超類(superclass)是被直接或間接繼承的類派生類(derived-class)也稱子類 (subclass)繼承其他類而得到的類繼承所有祖先的狀態(tài)和行為派生類可以增加變量和方法派生類也可以覆蓋(override)繼承的方法,1 類的繼承,1.1 繼承的概念基類和派生類,6,子類對象與父類對象存在“IS A”(或“is a kind of”)的關(guān)系,1 類的繼承,1.1 繼承的概念is_a關(guān)系,7,動物類層次舉例,一般,具體,動物,蛇,蜥蜴,鯨,爬行動物,哺乳動物,狗,巨蜥,壁虎,壁虎,是一種,蜥蜴,爬行,動物是,動物的,一種,1 類的繼承,1.1 繼承的概念圖,8,舉例,1 類的繼承,1.1 繼承的概念又一個例子,9,10,派生類產(chǎn)生的對象從外部來看,它應(yīng)該包括與基類相同的接口可以具有更多的方法和數(shù)據(jù)成員其內(nèi)包含著一個基類類型的子對象,1 類的繼承,1.1 繼承的概念派生類對象,11,1.2 繼承的語法,繼承的語法class childClass extends parentClass /類體,類的繼承,1 類的繼承,12,在一個公司中,有普通員工(Employees)及管理人員(Magagers)兩類人員職員對象(Employees)可能有的屬性信息包括員工號(employeeNumber)姓名(name)地址(address)電話號碼(phoneNumber)管理人員(Managers)除具有普通員工的屬性外,還可能具有下面的屬性職責(responsibilities)所管理的職員(listOfEmployees),1 類的繼承,1.2 繼承的語法(續(xù))例,13,Employee與Manager的類圖,1 類的繼承,1.2 繼承的語法(續(xù))例,14,/父類Employeeclass Employee int employeeNumbe ; String name, address, phoneNumber ;/子類Managerclass Manager extends Employee /子類增加的數(shù)據(jù)成員 String responsibilities, listOfEmployees;,1 類的繼承,1.2 繼承的語法(續(xù))例,15,設(shè)有三個類:Person, Employee, Manager。其類層次如圖:,1.2 繼承的語法(續(xù))例,16,1.2 繼承的語法(續(xù))例,17,1.2 繼承的語法(續(xù))例,18,1.2 繼承的語法(續(xù))例,19,1 類的繼承,1.2 繼承的語法(續(xù)),20,21,22,1 類的繼承,通過繼承,可以根據(jù)已有類來定義新類,新類擁有已有類的所有功能父類是所有子類的公共屬性及方法的集合,子類則是父類的特殊化繼承機制可以提高程序的抽象程度,提高代碼的可重用性,23,子類不能直接訪問父類中的私有屬性及方法可使用公有(及保護)方法進行訪問,1 類的繼承,1.2 繼承的語法(續(xù))例,24,public class B public int a = 10; private int b = 20; protected int c = 30; public int getB() return b; public class A extends B public int d; public void tryVariables() System.out.println(a); /允許 System.out.println(b); /不允許 System.out.println(getB(); /允許 System.out.println(c); /允許 ,1 類的繼承,1.2 繼承的語法(續(xù)),25,1.3 隱藏和覆蓋,擴展類繼承已有的屬性和方法改寫已有的屬性和方法改寫已有的屬性:隱藏改寫已有的方法:覆蓋,1 類的繼承,26,屬性的隱藏子類中聲明了與父類中相同的成員變量名,則從父類繼承的變量將被隱藏子類擁有了兩個相同名字的變量,一個繼承自父類,另一個由自己聲明當子類執(zhí)行繼承自父類的操作時,處理的是繼承自父類的變量,而當子類執(zhí)行它自己聲明的方法時,所操作的就是它自己聲明的變量,class Parent int aNumber;,class Child extends Parent float aNumber;,1 類的繼承,1.3 隱藏和覆蓋(續(xù))屬性的隱藏,27,如何訪問被隱藏的父類屬性調(diào)用從父類繼承的方法,則操作的是從父類繼承的屬性調(diào)用被隱藏的屬性super.屬性,1 類的繼承,1.3 隱藏和覆蓋(續(xù))訪問被隱藏的父類屬性,28,class A1 int x = 2; public void setx(int i) x = i; void printa() System.out.println(x); class B1 extends A1 int x=100; void printb() super.x = super.x +10 ; System.out.println(super.x= + super.x + x= + x); ,運行結(jié)果:4super.x= 12 x= 10012super.x= 16 x= 100164,public class Exam4_4Test public static void main(String args) A1 a1 = new A1(); a1.setx(4); a1.printa(); B1 b1 = new B1(); b1.printb(); b1.printa(); b1.setx(6); / 將繼承x值設(shè)置為6 b1.printb(); b1.printa(); a1.printa(); ,1 類的繼承,1.3 隱藏和覆蓋(續(xù))例屬性的隱藏舉例,29,30,31,32,33,34,子類不能繼承父類中的靜態(tài)屬性,但可以對父類中的靜態(tài)屬性進行操作。如在上面的例子中,將“int x = 2;”改為“static int x = 2;”,再編譯及運行程序,會得到下面的結(jié)果4super.x= 14 x= 10014super.x= 16 x= 1001616在上面的結(jié)果中,第一行及最后一行都是語句“a1.printa();”輸出的結(jié)果,顯然類中的printb()方法修改的是類中的靜態(tài)屬性x,1 類的繼承,1.3 隱藏和覆蓋(續(xù))例 操作父類靜態(tài)屬性舉例,35,36,1.3 隱藏和覆蓋,擴展類繼承已有的屬性和方法改寫已有的屬性和方法改寫已有的屬性:隱藏改寫已有的方法:覆蓋,1 類的繼承,37,方法覆蓋覆蓋方法的返回類型,方法名稱,參數(shù)的個數(shù)及類型必須和被覆蓋的方法一摸一樣覆蓋方法的訪問權(quán)限可以比被覆蓋的寬松,但是不能更為嚴格,1 類的繼承,1.3 隱藏和覆蓋(續(xù))方法覆蓋,38,方法覆蓋的應(yīng)用場合子類中實現(xiàn)與父類相同的功能,但采用不同的算法或公式 在名字相同的方法中,要做比父類更多的事情 在子類中需要取消從父類繼承的方法,1 類的繼承,1.3 隱藏和覆蓋(續(xù))方法覆蓋的應(yīng)用場合,39,必須覆蓋的方法派生類必須覆蓋基類中的抽象的方法,否則派生類自身也成為抽象類.不能覆蓋的方法基類中聲明為final的終結(jié)方法基類中聲明為static 的靜態(tài)方法調(diào)用被覆蓋的方法super.overriddenMethodName();,1 類的繼承,1.3 隱藏和覆蓋(續(xù))方法覆蓋的注意事項,40,1.4 有繼承時的構(gòu)造方法,有繼承時的構(gòu)造方法遵循以下的原則子類不能從父類繼承構(gòu)造方法好的程序設(shè)計方法是在子類的構(gòu)造方法中調(diào)用某一個父類構(gòu)造方法,調(diào)用語句必須出現(xiàn)在子類構(gòu)造方法的第一行,可使用super關(guān)鍵字如子類構(gòu)造方法的聲明中沒有明確調(diào)用父類構(gòu)造方法,則系統(tǒng)在執(zhí)行子類的構(gòu)造方法時會自動調(diào)用父類的默認構(gòu)造方法(即無參的構(gòu)造方法),1 類的繼承,41,public class Person protected String name, phoneNumber, address; public Person() this(, , ); public Person(String aName, String aPhoneNumber, String anAddress) name = aName; phoneNumber = aPhoneNumber; address = anAddress; ,1 類的繼承,1.4 有繼承時的構(gòu)造方法(續(xù))例,42,public class Employee extends Person protected int employeeNumber; protected String workPhoneNumber; public Employee() /此處隱含調(diào)用構(gòu)造方法 Person() this(0, ); public Employee(int aNumber, String aPhoneNumber) /此處隱含調(diào)用構(gòu)造方法 Person() employeeNumber = aNumber; workPhoneNumber = aPhoneNumber; ,1 類的繼承,1.4 有繼承時的構(gòu)造方法(續(xù))例,43,public class Professor extends Employee protected String research; public Professor() super(); research = ; public Professor(int aNumber, String aPhoneNumber, String aResearch) super(aNumber, aPhoneNumber); research = aResearch; ,1 類的繼承,1.4 有繼承時的構(gòu)造方法(續(xù))例,44,目錄,1 類的繼承2 終結(jié)類與終結(jié)方法3 抽象類4 類的組合,Java類的定義public abstract|final class 類名extends 父類名 implements 接口名 成員變量(域)定義 成員函數(shù)(方法)定義,45/39,46,2 終結(jié)類與終結(jié)方法,終結(jié)類與終結(jié)方法被final修飾符修飾的類和方法終結(jié)類不能被繼承終結(jié)方法不能被當前類的子類重寫,47,終結(jié)類的特點不能有派生類終結(jié)類存在的理由安全: 黑客用來攪亂系統(tǒng)的一個手法是建立一個類的派生類,然后用他們的類代替原來的類設(shè)計: 你認為你的類是最好的或從概念上你的類不應(yīng)該有任何派生類,2 終結(jié)類與終結(jié)方法,2.1 終結(jié)類,48,聲明ChessAlgorithm 類為final 類final class ChessAlgorithm . . . 如果寫下如下程序:class BetterChessAlgorithm extends ChessAlgorithm 編譯器將顯示一個錯誤Chess.java:6: Cant subclass final classes: class ChessAlgorithmclass BetterChessAlgorithm extends ChessAlgorithm 1 error,2 終結(jié)類與終結(jié)方法,2.1 終結(jié)類(續(xù))一個例子,49,終結(jié)方法的特點不能被派生類覆蓋終結(jié)方法存在的理由對于一些比較重要且不希望子類進行更改的方法,可以聲明為終結(jié)方法。可防止子類對父類關(guān)鍵方法的錯誤重寫,增加了代碼的安全性和正確性提高運行效率。通常,當java運行環(huán)境(如java解釋器)運行方法時,它將首先在當前類中查找該方法,接下來在其超類中查找,并一直沿類層次向上查找,直到找到該方法為止,2 終結(jié)類與終結(jié)方法,2.2 終結(jié)方法,50,final 方法舉例class Parent public Parent() /構(gòu)造方法 final int getPI() return Math.PI; /終結(jié)方法說明getPI()是用final修飾符聲明的終結(jié)方法,不能在子類中對該方法進行重載,因而如下聲明是錯的Class Child extends Parent public Child() /構(gòu)造方法 int getPI() return 3.14; /重寫父類中的終結(jié)方法,不允許,2 終結(jié)類與終結(jié)方法,2.2 終結(jié)方法(續(xù))例,51,目錄,1 類的繼承2 終結(jié)類與終結(jié)方法3 抽象類4 類的組合,Java類的定義public abstract|final class 類名extends 父類名 implements 接口名 成員變量(域)定義 成員函數(shù)(方法)定義,52/39,53,3 抽象類,抽象類代表一個抽象概念的類沒有具體實例對象的類,不能使用new方法進行實例化類前需加修飾符abstract可包含常規(guī)類能夠包含的任何東西,例如構(gòu)造方法,非抽象方法也可包含抽象方法,這種方法只有方法的聲明,而沒有方法的實現(xiàn),54,存在意義抽象類是類層次中較高層次的概括,抽象類的作用是讓其他類來繼承它的抽象化的特征抽象類中可以包括被它的所有子類共享的公共行為抽象類可以包括被它的所有子類共享的公共屬性在程序中不能用抽象類作為模板來創(chuàng)建對象;在用戶生成實例時強迫用戶生成更具體的實例,保證代碼的安全性,3 抽象類(續(xù))存在意義,55,將所有圖形的公共屬性及方法抽象到抽象類Shape。再將2D及3D對象的特性分別抽取出來,形成兩個抽象類TwoDimensionalShape及ThreeDimensionalShape2D圖形包括Circles、Triangles、Rectangles和Squares3D圖形包括Cube、Sphere、或Tetrahedron在UML中,抽象類的類名為斜體,以與具體類相區(qū)別,3 抽象類(續(xù))幾何形狀的例子,56,57,前例中,如果在應(yīng)用系統(tǒng)中涉及到的人員只包括:Customers,Employees 及 Managers。則Person 類的子類對象覆蓋了應(yīng)用中的對象,可以將Person 類聲明為抽象類,3 抽象類(續(xù))人員的例子,58,3.1 抽象類的聲明,抽象類聲明的語法形式為abstract class Number . . .如果寫: new Number();編譯器將顯示錯誤,3 抽象類,59,3.2 抽象方法,抽象方法聲明的語法形式為public abstract (.);僅有方法頭,而沒有方法體和操作實現(xiàn)具體實現(xiàn)由當前類的不同子類在它們各自的類聲明中完成抽象類可以包含抽象方法,3 抽象類,60,需注意的問題一個抽象類的子類如果不是抽象類,則它必須為父類中的所有抽象方法書寫方法體,即重寫父類中的所有抽象方法只有抽象類才能具有抽象方法,即如果一個類中含有抽象方法,則必須將這個類聲明為抽象類除了抽象方法,抽象類中還可以包括非抽象方法,3 抽象類,3.2 抽象方法(續(xù))需注意的問題,61,抽象方法的優(yōu)點隱藏具體的細節(jié)信息,所有的子類使用的都是相同的方法頭,其中包含了調(diào)用該方法時需要了解的全部信息強迫子類完成指定的行為,規(guī)定其子類需要用到的“標準”行為,3 抽象類,3.2 抽象方法(續(xù))抽象方法的優(yōu)點,62,各種圖形都需要實現(xiàn)繪圖方法,可在它們的抽象父類中聲明一個draw抽象方法abstract class GraphicObject int x, y; void moveTo(int newX, int newY) . . . abstract void draw();,3 抽象類,3.2 抽象方法(續(xù))一個繪圖的例子,63,然后在每一個子類中重寫draw方法,例如:class Circle extends GraphicObject void draw() . . . class Rectangle extends GraphicObject void draw() . . . ,3 抽象類,3.2 抽象方法(續(xù))一個繪圖的例子,64,目錄,1 類的繼承2 終結(jié)類與終結(jié)方法3 抽象類4 類的組合,65,66,4.1 組合的語法,組合的語法很簡單,只要把已存在類的對象放到新類中即可可以使用“has a”語句來描述這種關(guān)系例如,考慮Kitchen類提供烹飪和冷藏食品的功能,很自然的說“my kitchen has a cooker/refrigerator”。所以,可簡單的把對象myCooker和myRefrigerator放在類Kitchen中。格式如下class Cooker / 類的語句 class Refrigerator / 類的語句class Kitchen Cooker myCooker; Refrigerator myRefrigerator;,4 類的組合,67,一條線段包含兩個端點public class Point /點類 private int x, y; /coordinate public Point(int x, int y) this.x = x; this.y = y; public int GetX() return x; public int GetY() return y; ,4類的組合,4.1 組合的語法例,68,class Line /線段類 private Point p1,p2; / 兩端點 Line(Point a, Point b) p1 = new Point(a.GetX(),a.GetY(); p2 = new Point(b.GetX(),b.GetY(); public double Length() return Math.sqrt(Math.pow(p2.GetX()-p1.GetX(),2) + Math.pow(p2.GetY()-p1.GetY(),2); ,4 類的組合,4.1 組合的語法例,69,car(汽車)對象是一個很好的例子,由于汽車的裝配是故障分析時需要考慮的一項因素,所以有助于客戶程序員理解如何使用類,而且類創(chuàng)建者的編程復(fù)雜程度也會大幅度降低class Engine /發(fā)動機類public void start() public void rev() public void stop() ,4 類的組合,4.1 組合與繼承的比較(續(xù))Car的例子,70,class Wheel /車輪類 public void inflate(int psi) class Window /車窗類public void rollup() public void rolldown() class Door /車門類public Window window = new Window();public void open() public void close() ,4 類的組合,4.1 組合與繼承的比較(續(xù))Car的例子,71,public class Car public Engine engine = new Engine(); public Wheel wheel = new Wheel4;public Door left = new Door(),right = new Door(); public Car() for(int i = 0; i 4; i+) wheeli = new Wheel();public static void main(String args) Car car = new Car();car.left.window.rollup();car.wheel0.inflate(72);,4 類的組合,4.1 組合與繼承的比較(續(xù))Car的例子,72,許多時候都要求將組合與繼承兩種技術(shù)結(jié)合起來使用,創(chuàng)建一個更復(fù)雜的類,4 類的組合,4.1 組合與繼承的結(jié)合,73,組合與繼承舉例class Plate /聲明盤子public Plate(int i) System.out.println(Plate constructor);class DinnerPlate extends Plate /聲明餐盤為盤子的子類public DinnerPlate(int i) super(i);System.out.println(DinnerPlate constructor);,4 類的組合,4.1 組合與繼承的結(jié)合(續(xù))例,74,class Utensil /聲明器具Utensil(int i) System.out.println(Utensil constructor);class Spoon extends Utensil /聲明勺子為器具的子類public Spoon(int i) super(i);System.out.println(Spoon constructor);,4 類的組合,4.1 組合與繼承的結(jié)合(續(xù))例,75,class Fork extends Utensil /聲明餐叉為器具的子類public Fork(int i) super(i);System.out.println(Fork constructor);class Knife extends Utensil /聲明餐刀為器具的子類public Knife(int i) super(i);System.out.println(Knife constructor);,4 類的組合,4.1 組合與繼承的結(jié)合(續(xù))例,76,class Custom / 聲明做某事的習慣public Custom(int i) System.out.println(Custom constructor);public class PlaceSetting extends Custom /聲明餐桌的布置 Spoon sp; Fork frk; Knife kn; DinnerPlate pl;public PlaceSetting(int i) super(i + 1);sp = new Spoon(i + 2);frk = new Fork(i + 3);kn = new Knife(i + 4);pl = new DinnerPlate(i + 5);System.out.println(PlaceSetting constructor);public static void main(String args) PlaceSetting x = new PlaceSetting(9);,4 類的組合,4.1 組合與繼承的結(jié)合(續(xù))例,77,運行結(jié)果Custom constructorUtensil constructorSpoon constructorUtensil constructorFork constructorUtensil constructorKnife constructorPlate constructorDinnerPlate constructorPlaceSetting constructor,4 類的組合,4.1 組合與繼承的結(jié)合(續(xù))例運行結(jié)果,- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
5 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 信息系統(tǒng) 開發(fā) 系統(tǒng) 方法 工具 演示 文檔
鏈接地址:http://m.appdesigncorp.com/p-249537.html