《信息系統(tǒng)開發(fā)》系統(tǒng)開發(fā)方法與工具演示文檔_第1頁(yè)
《信息系統(tǒng)開發(fā)》系統(tǒng)開發(fā)方法與工具演示文檔_第2頁(yè)
《信息系統(tǒng)開發(fā)》系統(tǒng)開發(fā)方法與工具演示文檔_第3頁(yè)
《信息系統(tǒng)開發(fā)》系統(tǒng)開發(fā)方法與工具演示文檔_第4頁(yè)
《信息系統(tǒng)開發(fā)》系統(tǒng)開發(fā)方法與工具演示文檔_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1/39,繼承,2,目錄,1 類的繼承2 終結(jié)類與終結(jié)方法3 抽象類4 類的組合,Java類的定義public abstract|final class 類名extends 父類名 implements 接口名 成員變量(域)定義 成員函數(shù)(方法)定義,3/39,4,1 類的繼承,類的繼承一種由已有的類創(chuàng)建新類的機(jī)制,是面向?qū)ο蟪绦蛟O(shè)計(jì)的基石之一通過(guò)繼承,可以根據(jù)已有類來(lái)定義新類,新類擁有已有類的所有功能Java只支持類的單繼承,每個(gè)子類只能有一個(gè)直接父類父類是所有子類的公共屬性及方法的集合,子類則是父類的特殊化繼承機(jī)制可以提高程序的抽象程度,提高代碼的可重用性,5,基類(base class)也稱超類(superclass)是被直接或間接繼承的類派生類(derived-class)也稱子類 (subclass)繼承其他類而得到的類繼承所有祖先的狀態(tài)和行為派生類可以增加變量和方法派生類也可以覆蓋(override)繼承的方法,1 類的繼承,1.1 繼承的概念基類和派生類,6,子類對(duì)象與父類對(duì)象存在“IS A”(或“is a kind of”)的關(guān)系,1 類的繼承,1.1 繼承的概念is_a關(guān)系,7,動(dòng)物類層次舉例,一般,具體,動(dòng)物,蛇,蜥蜴,鯨,爬行動(dòng)物,哺乳動(dòng)物,狗,巨蜥,壁虎,壁虎,是一種,蜥蜴,爬行,動(dòng)物是,動(dòng)物的,一種,1 類的繼承,1.1 繼承的概念圖,8,舉例,1 類的繼承,1.1 繼承的概念又一個(gè)例子,9,10,派生類產(chǎn)生的對(duì)象從外部來(lái)看,它應(yīng)該包括與基類相同的接口可以具有更多的方法和數(shù)據(jù)成員其內(nèi)包含著一個(gè)基類類型的子對(duì)象,1 類的繼承,1.1 繼承的概念派生類對(duì)象,11,1.2 繼承的語(yǔ)法,繼承的語(yǔ)法class childClass extends parentClass /類體,類的繼承,1 類的繼承,12,在一個(gè)公司中,有普通員工(Employees)及管理人員(Magagers)兩類人員職員對(duì)象(Employees)可能有的屬性信息包括員工號(hào)(employeeNumber)姓名(name)地址(address)電話號(hào)碼(phoneNumber)管理人員(Managers)除具有普通員工的屬性外,還可能具有下面的屬性職責(zé)(responsibilities)所管理的職員(listOfEmployees),1 類的繼承,1.2 繼承的語(yǔ)法(續(xù))例,13,Employee與Manager的類圖,1 類的繼承,1.2 繼承的語(yǔ)法(續(xù))例,14,/父類Employeeclass Employee int employeeNumbe ; String name, address, phoneNumber ;/子類Managerclass Manager extends Employee /子類增加的數(shù)據(jù)成員 String responsibilities, listOfEmployees;,1 類的繼承,1.2 繼承的語(yǔ)法(續(xù))例,15,設(shè)有三個(gè)類:Person, Employee, Manager。其類層次如圖:,1.2 繼承的語(yǔ)法(續(xù))例,16,1.2 繼承的語(yǔ)法(續(xù))例,17,1.2 繼承的語(yǔ)法(續(xù))例,18,1.2 繼承的語(yǔ)法(續(xù))例,19,1 類的繼承,1.2 繼承的語(yǔ)法(續(xù)),20,21,22,1 類的繼承,通過(guò)繼承,可以根據(jù)已有類來(lái)定義新類,新類擁有已有類的所有功能父類是所有子類的公共屬性及方法的集合,子類則是父類的特殊化繼承機(jī)制可以提高程序的抽象程度,提高代碼的可重用性,23,子類不能直接訪問(wèn)父類中的私有屬性及方法可使用公有(及保護(hù))方法進(jìn)行訪問(wèn),1 類的繼承,1.2 繼承的語(yǔ)法(續(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 繼承的語(yǔ)法(續(xù)),25,1.3 隱藏和覆蓋,擴(kuò)展類繼承已有的屬性和方法改寫已有的屬性和方法改寫已有的屬性:隱藏改寫已有的方法:覆蓋,1 類的繼承,26,屬性的隱藏子類中聲明了與父類中相同的成員變量名,則從父類繼承的變量將被隱藏子類擁有了兩個(gè)相同名字的變量,一個(gè)繼承自父類,另一個(gè)由自己聲明當(dāng)子類執(zhí)行繼承自父類的操作時(shí),處理的是繼承自父類的變量,而當(dāng)子類執(zhí)行它自己聲明的方法時(shí),所操作的就是它自己聲明的變量,class Parent int aNumber;,class Child extends Parent float aNumber;,1 類的繼承,1.3 隱藏和覆蓋(續(xù))屬性的隱藏,27,如何訪問(wèn)被隱藏的父類屬性調(diào)用從父類繼承的方法,則操作的是從父類繼承的屬性調(diào)用被隱藏的屬性super.屬性,1 類的繼承,1.3 隱藏和覆蓋(續(xù))訪問(wèn)被隱藏的父類屬性,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); ,運(yùn)行結(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)屬性,但可以對(duì)父類中的靜態(tài)屬性進(jìn)行操作。如在上面的例子中,將“int x = 2;”改為“static int x = 2;”,再編譯及運(yùn)行程序,會(huì)得到下面的結(jié)果4super.x= 14 x= 10014super.x= 16 x= 1001616在上面的結(jié)果中,第一行及最后一行都是語(yǔ)句“a1.printa();”輸出的結(jié)果,顯然類中的printb()方法修改的是類中的靜態(tài)屬性x,1 類的繼承,1.3 隱藏和覆蓋(續(xù))例 操作父類靜態(tài)屬性舉例,35,36,1.3 隱藏和覆蓋,擴(kuò)展類繼承已有的屬性和方法改寫已有的屬性和方法改寫已有的屬性:隱藏改寫已有的方法:覆蓋,1 類的繼承,37,方法覆蓋覆蓋方法的返回類型,方法名稱,參數(shù)的個(gè)數(shù)及類型必須和被覆蓋的方法一摸一樣覆蓋方法的訪問(wèn)權(quán)限可以比被覆蓋的寬松,但是不能更為嚴(yán)格,1 類的繼承,1.3 隱藏和覆蓋(續(xù))方法覆蓋,38,方法覆蓋的應(yīng)用場(chǎng)合子類中實(shí)現(xiàn)與父類相同的功能,但采用不同的算法或公式 在名字相同的方法中,要做比父類更多的事情 在子類中需要取消從父類繼承的方法,1 類的繼承,1.3 隱藏和覆蓋(續(xù))方法覆蓋的應(yīng)用場(chǎng)合,39,必須覆蓋的方法派生類必須覆蓋基類中的抽象的方法,否則派生類自身也成為抽象類.不能覆蓋的方法基類中聲明為final的終結(jié)方法基類中聲明為static 的靜態(tài)方法調(diào)用被覆蓋的方法super.overriddenMethodName();,1 類的繼承,1.3 隱藏和覆蓋(續(xù))方法覆蓋的注意事項(xiàng),40,1.4 有繼承時(shí)的構(gòu)造方法,有繼承時(shí)的構(gòu)造方法遵循以下的原則子類不能從父類繼承構(gòu)造方法好的程序設(shè)計(jì)方法是在子類的構(gòu)造方法中調(diào)用某一個(gè)父類構(gòu)造方法,調(diào)用語(yǔ)句必須出現(xiàn)在子類構(gòu)造方法的第一行,可使用super關(guān)鍵字如子類構(gòu)造方法的聲明中沒有明確調(diào)用父類構(gòu)造方法,則系統(tǒng)在執(zhí)行子類的構(gòu)造方法時(shí)會(huì)自動(dòng)調(diào)用父類的默認(rèn)構(gòu)造方法(即無(wú)參的構(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 有繼承時(shí)的構(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 有繼承時(shí)的構(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 有繼承時(shí)的構(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é)方法不能被當(dāng)前類的子類重寫,47,終結(jié)類的特點(diǎn)不能有派生類終結(jié)類存在的理由安全: 黑客用來(lái)攪亂系統(tǒng)的一個(gè)手法是建立一個(gè)類的派生類,然后用他們的類代替原來(lái)的類設(shè)計(jì): 你認(rèn)為你的類是最好的或從概念上你的類不應(yīng)該有任何派生類,2 終結(jié)類與終結(jié)方法,2.1 終結(jié)類,48,聲明ChessAlgorithm 類為final 類final class ChessAlgorithm . . . 如果寫下如下程序:class BetterChessAlgorithm extends ChessAlgorithm 編譯器將顯示一個(gè)錯(cuò)誤Chess.java:6: Cant subclass final classes: class ChessAlgorithmclass BetterChessAlgorithm extends ChessAlgorithm 1 error,2 終結(jié)類與終結(jié)方法,2.1 終結(jié)類(續(xù))一個(gè)例子,49,終結(jié)方法的特點(diǎn)不能被派生類覆蓋終結(jié)方法存在的理由對(duì)于一些比較重要且不希望子類進(jìn)行更改的方法,可以聲明為終結(jié)方法。可防止子類對(duì)父類關(guān)鍵方法的錯(cuò)誤重寫,增加了代碼的安全性和正確性提高運(yùn)行效率。通常,當(dāng)java運(yùn)行環(huán)境(如java解釋器)運(yùn)行方法時(shí),它將首先在當(dāng)前類中查找該方法,接下來(lái)在其超類中查找,并一直沿類層次向上查找,直到找到該方法為止,2 終結(jié)類與終結(jié)方法,2.2 終結(jié)方法,50,final 方法舉例class Parent public Parent() /構(gòu)造方法 final int getPI() return Math.PI; /終結(jié)方法說(shuō)明getPI()是用final修飾符聲明的終結(jié)方法,不能在子類中對(duì)該方法進(jìn)行重載,因而如下聲明是錯(cuò)的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 抽象類,抽象類代表一個(gè)抽象概念的類沒有具體實(shí)例對(duì)象的類,不能使用new方法進(jìn)行實(shí)例化類前需加修飾符abstract可包含常規(guī)類能夠包含的任何東西,例如構(gòu)造方法,非抽象方法也可包含抽象方法,這種方法只有方法的聲明,而沒有方法的實(shí)現(xiàn),54,存在意義抽象類是類層次中較高層次的概括,抽象類的作用是讓其他類來(lái)繼承它的抽象化的特征抽象類中可以包括被它的所有子類共享的公共行為抽象類可以包括被它的所有子類共享的公共屬性在程序中不能用抽象類作為模板來(lái)創(chuàng)建對(duì)象;在用戶生成實(shí)例時(shí)強(qiáng)迫用戶生成更具體的實(shí)例,保證代碼的安全性,3 抽象類(續(xù))存在意義,55,將所有圖形的公共屬性及方法抽象到抽象類Shape。再將2D及3D對(duì)象的特性分別抽取出來(lái),形成兩個(gè)抽象類TwoDimensionalShape及ThreeDimensionalShape2D圖形包括Circles、Triangles、Rectangles和Squares3D圖形包括Cube、Sphere、或Tetrahedron在UML中,抽象類的類名為斜體,以與具體類相區(qū)別,3 抽象類(續(xù))幾何形狀的例子,56,57,前例中,如果在應(yīng)用系統(tǒng)中涉及到的人員只包括:Customers,Employees 及 Managers。則Person 類的子類對(duì)象覆蓋了應(yīng)用中的對(duì)象,可以將Person 類聲明為抽象類,3 抽象類(續(xù))人員的例子,58,3.1 抽象類的聲明,抽象類聲明的語(yǔ)法形式為abstract class Number . . .如果寫: new Number();編譯器將顯示錯(cuò)誤,3 抽象類,59,3.2 抽象方法,抽象方法聲明的語(yǔ)法形式為public abstract (.);僅有方法頭,而沒有方法體和操作實(shí)現(xiàn)具體實(shí)現(xiàn)由當(dāng)前類的不同子類在它們各自的類聲明中完成抽象類可以包含抽象方法,3 抽象類,60,需注意的問(wèn)題一個(gè)抽象類的子類如果不是抽象類,則它必須為父類中的所有抽象方法書寫方法體,即重寫父類中的所有抽象方法只有抽象類才能具有抽象方法,即如果一個(gè)類中含有抽象方法,則必須將這個(gè)類聲明為抽象類除了抽象方法,抽象類中還可以包括非抽象方法,3 抽象類,3.2 抽象方法(續(xù))需注意的問(wèn)題,61,抽象方法的優(yōu)點(diǎn)隱藏具體的細(xì)節(jié)信息,所有的子類使用的都是相同的方法頭,其中包含了調(diào)用該方法時(shí)需要了解的全部信息強(qiáng)迫子類完成指定的行為,規(guī)定其子類需要用到的“標(biāo)準(zhǔn)”行為,3 抽象類,3.2 抽象方法(續(xù))抽象方法的優(yōu)點(diǎn),62,各種圖形都需要實(shí)現(xiàn)繪圖方法,可在它們的抽象父類中聲明一個(gè)draw抽象方法abstract class GraphicObject int x, y; void moveTo(int newX, int newY) . . . abstract void draw();,3 抽象類,3.2 抽象方法(續(xù))一個(gè)繪圖的例子,63,然后在每一個(gè)子類中重寫draw方法,例如:class Circle extends GraphicObject void draw() . . . class Rectangle extends GraphicObject void draw() . . . ,3 抽象類,3.2 抽象方法(續(xù))一個(gè)繪圖的例子,64,目錄,1 類的繼承2 終結(jié)類與終結(jié)方法3 抽象類4 類的組合,65,66,4.1 組合的語(yǔ)法,組合的語(yǔ)法很簡(jiǎn)單,只要把已存在類的對(duì)象放到新類中即可可以使用“has a”語(yǔ)句來(lái)描述這種關(guān)系例如,考慮Kitchen類提供烹飪和冷藏食品的功能,很自然的說(shuō)“my kitchen has a cooker/refrigerator”。所以,可簡(jiǎn)單的把對(duì)象myCooker和myRefrigerator放在類Kitchen中。格式如下class Cooker / 類的語(yǔ)句 class Refrigerator / 類的語(yǔ)句class Kitchen Cooker myCooker; Refrigerator myRefrigerator;,4 類的組合,67,一條線段包含兩個(gè)端點(diǎn)public class Point /點(diǎn)類 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 組合的語(yǔ)法例,68,class Line /線段類 private Point p1,p2; / 兩端點(diǎn) 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 組合的語(yǔ)法例,69,car(汽車)對(duì)象是一個(gè)很好的例子,由于汽車的裝配是故障分析時(shí)需要考慮的一項(xiàng)因素,所以有助于客戶程序員理解如何使用類,而且類創(chuàng)建者的編程復(fù)雜程度也會(huì)大幅度降低class Engine /發(fā)動(dòng)機(jī)類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í)候都要求將組合與繼承兩種技術(shù)結(jié)合起來(lái)使用,創(chuàng)建一個(gè)更復(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);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論