




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1類的繼承v被繼承的類稱為父類或者超類或者基類v繼承父類的類稱為子類或者派生類v執行繼承時,子類將獲得父類的所有成員(包括private的成員),并具有自身特有的屬性。 繼承是面向對象編程技術繼承是面向對象編程技術的一塊基石,它允許創建的一塊基石,它允許創建分等級層次的類。運用繼分等級層次的類。運用繼承,可以創建一個通用類承,可以創建一個通用類定義一系列一般特性。該定義一系列一般特性。該類可以被更具體的類繼承類可以被更具體的類繼承Emoloyee類:類: name sexWorker類:類: category dressAllowanceOfficer類:類: empClass vehicle
2、職員類,具職員類,具有姓名和性有姓名和性別兩個屬性別兩個屬性工人類,繼承了父工人類,繼承了父類的姓名和性別屬類的姓名和性別屬性外還包含類別和性外還包含類別和是否有服裝津貼屬性是否有服裝津貼屬性主任類,還包含主任類,還包含級別和是否配備級別和是否配備交通工具屬性交通工具屬性2extends關鍵字vextends關鍵字用于繼承類。v聲明一個繼承父類的類的通常形式如下: class subclass-name extends superclass-name /類體 沒有extends,默認父類為Object一個類只能有一個父類,即單繼承子類繼承父類的全部成員注意注意3繼承示例class Employ
3、ee String name; /姓名 char sex; /性別 Employee(String n, char s) name = n; sex = s; public String getName() return name; public char getSex() return sex;class Worker extends Employee char category;/類別類別 boolean dressAllowance; /是否提供服裝津貼是否提供服裝津貼 Worker(String n,char s,char c,boolean d) super(n,s); catego
4、ry = c; dressAllowance = d; public char getCategory()return category; public boolean getAll() return dressAllowance; class InheDemo public static void main(String args) Worker w = new Worker(M.John,M,B,true); System.out.println(工人信息工人信息); System.out.println(姓名姓名 : +w.getName(); System.out.println(性別
5、性別 : +w.getSex(); System.out.println(類別類別 : +w.getCategory(); if(w.getAll() System.out.println(提供服裝津貼提供服裝津貼); else System.out.println(“未提供服裝津貼未提供服裝津貼”); 4繼承分析v在子類中不能直接訪問父類中的私有成員v子類和父類之間應該有“IS-A”關系v不要濫用繼承,只有在分類學上有意義時,才應該使用繼承v子類具有擴展超類的責任v繼承的目的就是為了代碼復用5里式代換原則v定義:無論何時,只要程序需要一個超類對象,那么就可以用一個子類對象來替代它。vEmpl
6、oyee e;ve=new Employee();/需要超類Employee對象ve=new Manager();/用子類對象替換掉超類對象 注意:反過來是不行的v多態和動態綁定聲明類型:對象變量被聲明時的類型實際類型:對象變量實際指向的對象類型一個對象變量可以指向多種實際類型的現象稱為“多態”在運行時自動選擇正確的方法進行調用的現象稱為“動態綁定”Java根據對象的實際類型來進行方法調用6方法重載(overloading)v方法重載是Java實現面向對象的多態性機制的一種方式。v同一個類中多個方法有相同的名字,不同的參數列表,這種情況稱為方法重載。v當重載方法被調用時,Java編譯器根據參數
7、的類型和數量來確定實際調用哪個重載方法的版本。v方法重載不考慮方法的返回類型。7重載構造函數v一個類可以有多個構造函數v如果一個類沒有定義一個構造函數,Java 編譯器將為這個類自動提供缺省構造函數(即無參的構造函數)v缺省構造函數將成員變量的值初始化為缺省值v一旦創建了自己的構造函數, Java 編譯器將不再自動提供無參的構造函數。v重載構造函數提供了一組創建對象的方式,可以根據需要決定是否帶初始參數。 public class constructOverload int x; constructOverload() x=0; System.out.println(不帶參數的構造函數不帶參數
8、的構造函數); constructOverload(int x) this.x=x; System.out.println(帶一個參數的構造函數帶一個參數的構造函數); 8方法覆蓋(override)v方法覆蓋是Java實現多態性機制的另一種方式。v在類層次結構中,如果子類中的一個方法與父類中的方法有相同的返回類型、相同的方法名并具有相同數量和類型的參數列表,這種情況稱為方法覆蓋。v當一個覆蓋方法通過父類引用被調用,Java根據當前被引用對象的實際類型來決定執行哪個版本的方法。 v可以通過super關鍵字調用直屬父類中被覆蓋的方法版本。9方法覆蓋示例class SuperClass int a
9、; SuperClass() a = 10; public void printA()System.out.println(父類中a =+a);class SubClass extends SuperClass int a; SubClass(int a) this.a = a; public void printA() System.out.println(子類中a = +a); public class OverrideDemo public static void main(String args) SuperClass s1 = new SubClass(10); s1.printA(
10、); 將調用子類的將調用子類的printA方法方法10包(package)v在Java中,包主要有以下用途 :將類進行分類組織存放 避免命名沖突 包允許在更廣的范圍內保護類、數據和方法 v包可以是類、接口和子包的集合v包中的文件被編譯成.class文件后被放在與完整包名匹配的子目錄中。實際是:基目錄包名v嵌套的包之間沒有任何關系例如:包java.util和 java.util.jar就是彼此無關的11使用包v創建包package mypackage; 在一個Java源文件中,只能使用一個package語句, 并且通常位于Java源文件的第一行 v訪問 Java 包成員 mypackage.My
11、_Classv導入包vimport package_name.*; 在一個Java源文件中,可以使用多個import語句v導入子包import package_name.cpackage.*;12類的靜態成員-staticv類中的靜態變量、方法或代碼塊屬于類,而不屬于某個特定的對象。 v類的靜態成員可以與類的名稱一起使用,而無需創建類的對象。 v靜態變量或方法也稱為類變量或類方法。用用static修飾符修飾,修飾符修飾,可以是變量、方法或代可以是變量、方法或代碼塊碼塊13靜態變量v不管創建了類的多少實例,整個類中靜態變量的副本只有一個。 v引用靜態變量的方法:-通過引用類的任一實例通過引用類的
12、任一實例-通過類的名稱通過類的名稱class StaticDemo static int x = 0; StaticDemo()x+;StaticDemo d1 = new StaticDemo();StaticDemo d2 = new StaticDemo();d1.x = 100 ;d2.x = 200;testVariable = d1.x; 通過類實例訪問通過類實例訪問不是一個好方法不是一個好方法StaticDemo d1 = new StaticDemo();StaticDemo d2 = new StaticDemo(); StaticDemo.x = 100;StaticDem
13、o.x = 200;testVariable = StaticDemo.x; 聲明為聲明為static的變量實的變量實質上就是全局變量質上就是全局變量通過類名訪問通過類名訪問14靜態方法v與靜態方法相關的幾個要點:類的靜態方法只能訪問其他的靜態成員類的靜態方法只能訪問其他的靜態成員靜態方法沒有靜態方法沒有this靜態方法不能被覆蓋為非靜態方法靜態方法不能被覆蓋為非靜態方法class StaticFun static int i = 10; int j; static void setValue(int x) j=x;/出錯出錯 System.out.println( + i); 不能訪問非靜態
14、變量不能訪問非靜態變量j,可以訪問靜態變量可以訪問靜態變量iclass StaticTest static void test() class Staticex extends StaticTest void test() /出錯出錯 15Java類屬性和對象屬性的初始化順序n首先找到類中的所有靜態聲明語句(不管位置在哪),把他們初始化為缺省值n然后再按照書寫順序依次處理每一個static的東西n把對象屬性初始化為缺省值n按照書寫順序依次處理每一個對象屬性的初始化語句n最后執行構造函數 16final 關鍵字/final類vfinal 修飾符可應用于類、方法和變量。vfinal在應用于類、方法
15、和變量時意義是不同的,但本質是一樣的:final表示不可改變。 v聲明為final的類不能被繼承。vfinal 類示例: java.lang.String final class TestFinal int i = 7; int j = 1; void f() class Further extends TestFinal final類不能被繼承類不能被繼承17final 方法v在方法聲明中使用 final 關鍵字向編譯器表明子類不能覆蓋(override)此方法。v在聲明類中,一個 final 方法只被實現一次。v如果一個類為 final 類,那么它的所有方法都為隱式的 final 方法。c
16、lass TestFinal final void f() class Further extends TestFinal final void f() final方法不能方法不能被覆蓋被覆蓋18final 變量v一個變量可以聲明為final,這樣做的目的是阻止它的內容被修改。v聲明final變量后,只能被初始化一次,然后就不能對其值進行修改。v一個final變量實質上是一個常量。 class FinalDemo public static void main(String args) final int noChange = 20; noChange = 30; final變量不能被變量不能
17、被修改修改19抽象類 1-1v定義:一種類型,只提供部分方法的具體實現。v語法:abstract class 類名.v一般情況下,抽象類既包含具體方法,又包含抽 象方法。 v具體方法:既有方法的聲明,又有方法的實現(即有方法體)。v抽象方法:只有方法的聲明,而沒有方法的實現(即沒有方法體)。語法: abstract 返回類型 方法名(參數列表)抽象類不能被實例化,只能被繼承。abstract 修飾符可修飾符可與類和方法一起與類和方法一起使用使用20抽象類 1-2v抽象類就是用來繼承的v子類必須為抽象類中的所有抽象方法提供具體實現,否則,子類也將是一個抽象類v抽象類中可以聲明實例變量,這些實例變
18、量就是為了提供給子類繼承的v抽象類可以有一個或多個構造函數,它是提供給子類進行調用的v特別地,抽象類中的所有方法都可以是具體方法21抽象類示例abstract class Employee int basic = 2000; abstract void salary();/抽象方法class Manager extends Employee void salary() System.out.println(薪資等于 +basic*5); class Worker extends Employee void salary() System.out.println(薪資等于 +basic*2);
19、抽象方法沒有抽象方法沒有方法主體方法主體在子類中提供在子類中提供實現實現在子類中提供在子類中提供實現實現22Java接口 2-1v定義:一種類型,不包含任何具體方法。換言之,所有方法都是抽象方法v語法:public interface 接口名v接口不能被實例化v接口中的抽象方法不需要abstract修飾v一個類可以繼承接口,而且可以同時繼承多個接口。一個類繼承一個接口被稱作“接口繼承”;通過一個類同時繼承多個接口可以在Java中實現“多重繼承”23Java接口 2-2v接口中的方法被默認為是public的,所以在實現一個接口的時候,來自接口中的方法必須定義成publicv接口中可包含基本數據類型的數據成員,但它們都默認為是public static final的,因此,這些數據成員是靜態常量。v一個接口也可以繼承一個或多個接口,語法為:interface 接口名 extends 接口1, ,接口n 24創建接
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年旋渦式鼓風機合作協議書
- 廣告宣傳欄制作協議
- 2025年江西危險品資格證理論考試試題2024年的
- 企業出口貿易資質及運營證明(8篇)
- 深度解析管理學試題及答案
- 學校內部教育培訓合作協議
- 家政服務中介合同
- 農業種植技術轉讓協議
- 室內裝修工程施工合同
- 餐飲業高效點餐與智能廚房管理方案
- MT 684-1997礦用提升容器重要承載件無損探傷方法與驗收規范
- GB 4053.1-2009固定式鋼梯及平臺安全要求第1部分:鋼直梯
- 膠水MSDS安全技術說明書
- 四年級數學 《軸對稱》
- 危險化學品技術要求MSDS(氬氣)
- 出租房屋安全檢查記錄
- 消防工程計量和計價課件
- 突發公共衛生事件流行病學-課件
- 2021國家開放大學《公共關系學》網上課程形考任務1-4附參考答案
- 液壓氣動技術課程設計報告
- 體育館專業擴聲設計方案
評論
0/150
提交評論