




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1類的繼承v被繼承的類稱為父類或者超類或者基類v繼承父類的類稱為子類或者派生類v執(zhí)行繼承時,子類將獲得父類的所有成員(包括private的成員),并具有自身特有的屬性。 繼承是面向?qū)ο缶幊碳夹g(shù)繼承是面向?qū)ο缶幊碳夹g(shù)的一塊基石,它允許創(chuàng)建的一塊基石,它允許創(chuàng)建分等級層次的類。運用繼分等級層次的類。運用繼承,可以創(chuàng)建一個通用類承,可以創(chuàng)建一個通用類定義一系列一般特性。該定義一系列一般特性。該類可以被更具體的類繼承類可以被更具體的類繼承Emoloyee類:類: name sexWorker類:類: category dressAllowanceOfficer類:類: empClass vehicle
2、職員類,具職員類,具有姓名和性有姓名和性別兩個屬性別兩個屬性工人類,繼承了父工人類,繼承了父類的姓名和性別屬類的姓名和性別屬性外還包含類別和性外還包含類別和是否有服裝津貼屬性是否有服裝津貼屬性主任類,還包含主任類,還包含級別和是否配備級別和是否配備交通工具屬性交通工具屬性2extends關(guān)鍵字vextends關(guān)鍵字用于繼承類。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子類和父類之間應(yīng)該有“IS-A”關(guān)系v不要濫用繼承,只有在分類學(xué)上有意義時,才應(yīng)該使用繼承v子類具有擴展超類的責任v繼承的目的就是為了代碼復(fù)用5里式代換原則v定義:無論何時,只要程序需要一個超類對象,那么就可以用一個子類對象來替代它。vEmpl
6、oyee e;ve=new Employee();/需要超類Employee對象ve=new Manager();/用子類對象替換掉超類對象 注意:反過來是不行的v多態(tài)和動態(tài)綁定聲明類型:對象變量被聲明時的類型實際類型:對象變量實際指向的對象類型一個對象變量可以指向多種實際類型的現(xiàn)象稱為“多態(tài)”在運行時自動選擇正確的方法進行調(diào)用的現(xiàn)象稱為“動態(tài)綁定”Java根據(jù)對象的實際類型來進行方法調(diào)用6方法重載(overloading)v方法重載是Java實現(xiàn)面向?qū)ο蟮亩鄳B(tài)性機制的一種方式。v同一個類中多個方法有相同的名字,不同的參數(shù)列表,這種情況稱為方法重載。v當重載方法被調(diào)用時,Java編譯器根據(jù)參數(shù)
7、的類型和數(shù)量來確定實際調(diào)用哪個重載方法的版本。v方法重載不考慮方法的返回類型。7重載構(gòu)造函數(shù)v一個類可以有多個構(gòu)造函數(shù)v如果一個類沒有定義一個構(gòu)造函數(shù),Java 編譯器將為這個類自動提供缺省構(gòu)造函數(shù)(即無參的構(gòu)造函數(shù))v缺省構(gòu)造函數(shù)將成員變量的值初始化為缺省值v一旦創(chuàng)建了自己的構(gòu)造函數(shù), Java 編譯器將不再自動提供無參的構(gòu)造函數(shù)。v重載構(gòu)造函數(shù)提供了一組創(chuàng)建對象的方式,可以根據(jù)需要決定是否帶初始參數(shù)。 public class constructOverload int x; constructOverload() x=0; System.out.println(不帶參數(shù)的構(gòu)造函數(shù)不帶參數(shù)
8、的構(gòu)造函數(shù)); constructOverload(int x) this.x=x; System.out.println(帶一個參數(shù)的構(gòu)造函數(shù)帶一個參數(shù)的構(gòu)造函數(shù)); 8方法覆蓋(override)v方法覆蓋是Java實現(xiàn)多態(tài)性機制的另一種方式。v在類層次結(jié)構(gòu)中,如果子類中的一個方法與父類中的方法有相同的返回類型、相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,這種情況稱為方法覆蓋。v當一個覆蓋方法通過父類引用被調(diào)用,Java根據(jù)當前被引用對象的實際類型來決定執(zhí)行哪個版本的方法。 v可以通過super關(guān)鍵字調(diào)用直屬父類中被覆蓋的方法版本。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、); 將調(diào)用子類的將調(diào)用子類的printA方法方法10包(package)v在Java中,包主要有以下用途 :將類進行分類組織存放 避免命名沖突 包允許在更廣的范圍內(nèi)保護類、數(shù)據(jù)和方法 v包可以是類、接口和子包的集合v包中的文件被編譯成.class文件后被放在與完整包名匹配的子目錄中。實際是:基目錄包名v嵌套的包之間沒有任何關(guān)系例如:包java.util和 java.util.jar就是彼此無關(guān)的11使用包v創(chuàng)建包package mypackage; 在一個Java源文件中,只能使用一個package語句, 并且通常位于Java源文件的第一行 v訪問 Java 包成員 mypackage.My
11、_Classv導(dǎo)入包vimport package_name.*; 在一個Java源文件中,可以使用多個import語句v導(dǎo)入子包import package_name.cpackage.*;12類的靜態(tài)成員-staticv類中的靜態(tài)變量、方法或代碼塊屬于類,而不屬于某個特定的對象。 v類的靜態(tài)成員可以與類的名稱一起使用,而無需創(chuàng)建類的對象。 v靜態(tài)變量或方法也稱為類變量或類方法。用用static修飾符修飾,修飾符修飾,可以是變量、方法或代可以是變量、方法或代碼塊碼塊13靜態(tài)變量v不管創(chuàng)建了類的多少實例,整個類中靜態(tài)變量的副本只有一個。 v引用靜態(tài)變量的方法:-通過引用類的任一實例通過引用類的
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的變量實的變量實質(zhì)上就是全局變量質(zhì)上就是全局變量通過類名訪問通過類名訪問14靜態(tài)方法v與靜態(tài)方法相關(guān)的幾個要點:類的靜態(tài)方法只能訪問其他的靜態(tài)成員類的靜態(tài)方法只能訪問其他的靜態(tài)成員靜態(tài)方法沒有靜態(tài)方法沒有this靜態(tài)方法不能被覆蓋為非靜態(tài)方法靜態(tài)方法不能被覆蓋為非靜態(tài)方法class StaticFun static int i = 10; int j; static void setValue(int x) j=x;/出錯出錯 System.out.println( + i); 不能訪問非靜態(tài)
14、變量不能訪問非靜態(tài)變量j,可以訪問靜態(tài)變量可以訪問靜態(tài)變量iclass StaticTest static void test() class Staticex extends StaticTest void test() /出錯出錯 15Java類屬性和對象屬性的初始化順序n首先找到類中的所有靜態(tài)聲明語句(不管位置在哪),把他們初始化為缺省值n然后再按照書寫順序依次處理每一個static的東西n把對象屬性初始化為缺省值n按照書寫順序依次處理每一個對象屬性的初始化語句n最后執(zhí)行構(gòu)造函數(shù) 16final 關(guān)鍵字/final類vfinal 修飾符可應(yīng)用于類、方法和變量。vfinal在應(yīng)用于類、方法
15、和變量時意義是不同的,但本質(zhì)是一樣的: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 關(guān)鍵字向編譯器表明子類不能覆蓋(override)此方法。v在聲明類中,一個 final 方法只被實現(xiàn)一次。v如果一個類為 final 類,那么它的所有方法都為隱式的 final 方法。c
16、lass TestFinal final void f() class Further extends TestFinal final void f() final方法不能方法不能被覆蓋被覆蓋18final 變量v一個變量可以聲明為final,這樣做的目的是阻止它的內(nèi)容被修改。v聲明final變量后,只能被初始化一次,然后就不能對其值進行修改。v一個final變量實質(zhì)上是一個常量。 class FinalDemo public static void main(String args) final int noChange = 20; noChange = 30; final變量不能被變量不能
17、被修改修改19抽象類 1-1v定義:一種類型,只提供部分方法的具體實現(xiàn)。v語法:abstract class 類名.v一般情況下,抽象類既包含具體方法,又包含抽 象方法。 v具體方法:既有方法的聲明,又有方法的實現(xiàn)(即有方法體)。v抽象方法:只有方法的聲明,而沒有方法的實現(xiàn)(即沒有方法體)。語法: abstract 返回類型 方法名(參數(shù)列表)抽象類不能被實例化,只能被繼承。abstract 修飾符可修飾符可與類和方法一起與類和方法一起使用使用20抽象類 1-2v抽象類就是用來繼承的v子類必須為抽象類中的所有抽象方法提供具體實現(xiàn),否則,子類也將是一個抽象類v抽象類中可以聲明實例變量,這些實例變
18、量就是為了提供給子類繼承的v抽象類可以有一個或多個構(gòu)造函數(shù),它是提供給子類進行調(diào)用的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、抽象方法沒有抽象方法沒有方法主體方法主體在子類中提供在子類中提供實現(xiàn)實現(xiàn)在子類中提供在子類中提供實現(xiàn)實現(xiàn)22Java接口 2-1v定義:一種類型,不包含任何具體方法。換言之,所有方法都是抽象方法v語法:public interface 接口名v接口不能被實例化v接口中的抽象方法不需要abstract修飾v一個類可以繼承接口,而且可以同時繼承多個接口。一個類繼承一個接口被稱作“接口繼承”;通過一個類同時繼承多個接口可以在Java中實現(xiàn)“多重繼承”23Java接口 2-2v接口中的方法被默認為是public的,所以在實現(xiàn)一個接口的時候,來自接口中的方法必須定義成publicv接口中可包含基本數(shù)據(jù)類型的數(shù)據(jù)成員,但它們都默認為是public static final的,因此,這些數(shù)據(jù)成員是靜態(tài)常量。v一個接口也可以繼承一個或多個接口,語法為:interface 接口名 extends 接口1, ,接口n 24創(chuàng)建接
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航空航天復(fù)合材料 課件第1章 知識點6 微珠、納米碳管、石墨烯、有機纖維
- 2025醫(yī)院消防培訓(xùn)
- 護理查房:下肢骨折透析患者管理
- 長度計量基礎(chǔ)培訓(xùn)
- 創(chuàng)傷處理培訓(xùn)
- 超聲圖解及報告標準化流程
- 地球日環(huán)保教育
- 2025年中國排毒面膜行業(yè)市場全景分析及前景機遇研判報告
- 急性闌尾炎及術(shù)后護理常規(guī)
- 2025年中國木工油漆刷行業(yè)市場全景分析及前景機遇研判報告
- 成都東方廣益投資有限公司下屬企業(yè)招聘筆試真題2024
- 2024年湖南省公安廳招聘警務(wù)輔助人員筆試真題
- 2025年高考英語全國二卷試題含答案
- SL631水利水電工程單元工程施工質(zhì)量驗收標準第1部分:土石方工程
- 江岸區(qū)2023-2024學(xué)年下學(xué)期期末七年級數(shù)學(xué)試卷(含答案)
- 《國土空間規(guī)劃》-課程教學(xué)大綱
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計規(guī)范
- 2024年海關(guān)事務(wù)培訓(xùn)資料
- 【部編人教版】貴州省銅仁市2021-2022年八年級下期末數(shù)學(xué)試卷
- 礦用隔爆兼本安型電子皮帶秤技術(shù)規(guī)格書
- 冀教版七年級英語下冊期末試題-附答案
評論
0/150
提交評論