版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、高級類特性(上),ID:SCSJ001-Java Basic Syntax,高級類特性(上),static變量、方法和初始化器 final類、方法和變量 abstract類和abstract方法 模板設(shè)計模式,2011-05-03,2,棧內(nèi)存,堆內(nèi)存,代碼區(qū),常量區(qū)域,靜態(tài)的成員變量,test(),test1(),ts,TestStatic ts = new TestStatic(),new TestStatic(),s,s1,s2,s3,new Singleton(),static關(guān)鍵字,static關(guān)鍵字用來修飾變量、方法和內(nèi)部類,稱這些變量、方法和內(nèi)部類為靜態(tài)變量、靜態(tài)方法和靜態(tài)內(nèi)部類
2、static關(guān)鍵字聲明一個屬性或方法是和類相關(guān)的,而不是和類的某個特定的實例相關(guān),因此,這類屬性或方法也稱為“類屬性”或“類方法” 如果訪問控制權(quán)限允許,可不必創(chuàng)建該類對象而直接使用類名加“.”調(diào)用 static 不可用于修飾構(gòu)造器,2011-05-03,5,static自由塊,除了用于修飾變量和方法外,還可以用于修飾類中的自由塊 所謂類的“自由塊”,就是在類中用“”包含起來的不屬于任何方法或構(gòu)造器的代碼段 使用static來修飾的自由塊只在類加載的時候執(zhí)行一次,通常用于初始化靜態(tài)變量,2011-05-03,6,static 自由塊例子,public class Count private i
3、nt serialNumber; public static int counter; static counter = 1; ,public static int getTotalCount() return counter; public Count() counter+; serialNumber = counter; ,2011-05-03,7,單子(Singleton)設(shè)計模式,有時候,我們需要實現(xiàn)這樣的功能:那就是在整個應(yīng)用中,只有一個實例存在。比如,在PowerPoint中,只能出現(xiàn)一個幫助窗口。如果將這個幫助窗口當作一個類,這就意味著它只能有一個實例。 利用單子(Singlet
4、on)設(shè)計模式,可以實現(xiàn)這種需求。,2011-05-03,8,單子(Singleton)設(shè)計模式,public class Single private double r; private static Single sp; private Single() r = Math.random(); public static Single getInstance() if (sp=null) sp = new Single (); return sp; ,public double getR() return r; public static void main(String args) Sin
5、gle sp1 = Single.getInstance(); Single sp2 = Single.getInstance(); System.out.println(sp1.getR(); System.out.println(sp2.getR(); ,2011-05-03,9,單子(Singleton)設(shè)計模式,public class TeacherFactory static Teacher teacher; public static Teacher newInstance() if(teacher = null) teacher = new Teacher(); teacher
6、.setName(zhangsan); return teacher; ,TeacherFactory類空間,0 xff0044,Name; Age;,Teacher t1 = TeacherFactory.newInstance(); Teacher t2 = TeacherFactory.newInstance();,null,Teacher,在TeacherFactory類空間里,Teacher已經(jīng)不為空,直接返回第一次創(chuàng)建的Teacher.,2011-05-03,10,final關(guān)鍵字,final-用于類、方法、變量前 final類-不可被繼承,如java.lang.Math就是一個
7、final類,不可被繼承 final變量-在初始化后不可改變變量值,用于常量定義。如果final變量是引用變量,則不可以改變它的引用對象,但可以改變對象的數(shù)據(jù)(屬性) final方法-不可被覆蓋,2011-05-03,11,abstract(示例7-6),可以使用abstract來修飾一個類或者方法。 用abstract修飾的類表示這個類是一個抽象類,用abstract修飾的方法表示這個方法是一個抽象方法。 抽象類不能被實例化 抽象方法是只有方法聲明,而沒有方法的實現(xiàn)的方法。,2011-05-03,12,dog,cat,new Dog(哮天犬);,new Cat(喵星人);,Animal(),
8、P,new People(admin,Animal),抽象類(abstract class),抽象類里面并非一定需要抽象方法,但是沒有抽象方法,抽象類就沒有存在的必要 在以下任一條件成立時,類必須定義成抽象類: 類中有至少一個抽象方法 類繼承了父類中的抽象方法,但是至少有一個抽象方法沒有實現(xiàn) 類實現(xiàn)了某個接口,但沒有全部實現(xiàn)接口中的方法,2011-05-03,14,抽象類的例子,public abstract class Shapes /* *得出周長 */ public abstract double perimeter(); /* *得到形狀 */ public abstract Stri
9、ng getType(); ,2011-05-03,15,抽象類的例子(con.),public class ShapeTriangle extends Shapes protected double a,b,c; /* *實現(xiàn)父類中的抽象方法 */ public double perimeter() return a+b+c; public String getType() return 三角形; ,2011-05-03,16,模版設(shè)計模式(Template Pattern),在類中定義了某個算法的骨架,但不具體實現(xiàn),而在其子類中實現(xiàn) 例如,銀行計算利息,都是利率乘以本金和存款時間,但各種存
10、款方式計算利率的方式不同,所以,在賬戶這個類的相關(guān)方法里,只搭出算法的骨架,但不具體實現(xiàn)。具體實現(xiàn)由各個子類來完成。,2011-05-03,17,模版設(shè)計模式例子,abstract class LoanAccount /利息,本金 private double Interest, Fund; public double calculateInterest() /取得利率 double interest=getInterestRate(); /計算利息的算法:本金*利率, /但是利率的算法實現(xiàn)并沒有在這個類中實現(xiàn) Interest=getFund()*getInterestRate(); ret
11、urn Interest; /*不同的存款類型有不同的利率, 因此,不在這個父類中實現(xiàn)利率的計算方法,而將它推遲到子類中實現(xiàn)*/ protected abstract double getInterestRate(); ,2011-05-03,18,作業(yè),創(chuàng)建一個工廠,這個工廠只能生產(chǎn)一份Student的實例子(static). 定義一個抽象類,并在子類中實現(xiàn)抽象的方法. 有三角形,矩形,圓,分別求出各自的周長,面積(abstract).,2011-05-03,19,高級類特性(中),ID:SCSJ001-Java Basic Syntax,2011-05-03,20,高級類特性(中),接口
12、多態(tài) instanceof運算符 對象的造型(cast),2011-05-03,21,接口(interface)(示例7-8),接口(interface)是方法和常量值的定義的集合。 接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。 接口定義格式: interface extends ,interface Substitution public void exchange(); ,2011-05-03,22,接口的繼承(示例7-9),接口和類類似,也可以從一個父接口中派生。接口的繼承也是使用extends關(guān)鍵字來完成。 接口繼承的基本語法如下: interf
13、ace extends , 和類不同的是,一個接口可以繼承多個父接口,2011-05-03,23,實現(xiàn)接口(示例7-10),多個無關(guān)的類可實現(xiàn)同一個接口。 一個類可實現(xiàn)多個無關(guān)的接口 語法如下: := class extends implements ,* * 在Java中,可以通過接口來模擬多繼承,2011-05-03,24,實現(xiàn)接口,interface Car public void run(); ,interface Ship public void swing(); ,public class SteamBoat implements Car, Ship /*從Car中重載*/ pub
14、lic void run() System.out.println( run ); /*從Ship中重載*/ public void swing() System.out.println( swing ); ,2011-05-03,25,多態(tài)(Polymorphism),在Java中,對象變量是多態(tài)的。一個類型為Aclass的變量既可以指向類型為Aclass的對象,又可以指向Aclass的任何子類的對象 以多態(tài)的形式來傳遞參數(shù),增強了參數(shù)類型的靈活性,public interface Animal public void bark(); ,public class Cat implements
15、 Animal public void bark() System.out.println(miao miao.); ,Animal a = new Cat() ; a.bark();,2011-05-03,26,一個對象只能有一種確切的數(shù)據(jù)類型 一個引用類型變量如果聲明為父類的類型,但實際引用的是子類對象,那么該變量就不能再訪問子類中添加的屬性和方法,多態(tài)(Polymorphism)(con.),2011-05-03,27,Parent p = new Sub(); p.add();,Sub s = new Sub(); s.add1();,多態(tài)(Polymorphism)(con.),na
16、me: String,name: String,add1:0 x8888888888,add: 0 xff76567820 sub: 0 xff76567821 add2:0 xff76567822,Parent,Sub,add: 0 xff76567810 sub: 0 xff76567811,add: 0 xff76567810 sub: 0 xff76567811,add1不可見,2011-05-03,28,私有方法屏蔽回答打印結(jié)果?,public class PrivateOverride private void f() /此處改為public 打印public f ; System
17、.out.println(private f); public static void main(String args) PrivateOverride p = new Derivate (); p.f();/private f class Derivate extends PrivateOverride public void f() System.out.println(“public f”); ,2011-05-03,29,多態(tài)情況下私有方法屏蔽,PrivateOverride p = new Derivate ();,PrivateOverride private f():0 x89
18、8987665;,Derivate extends PrivateOverride public f():0 x121121765;,不覆蓋,PrivateOverride public f():0 x898987665;,Derivate extends PrivateOverride public f():0 x121121765;,覆蓋,PrivateOverride public f(): 0 x121121765;,protected方法呢?能否覆蓋?,2011-05-03,30,public class Enigeer implements People private int m
19、onthSalary ; private int projectSalary ; public Enigeer (int monthSalary, int projectSalary) this.monthSalary = monthSalary; this. projectSalary = projectSalary; public int yearSalary() return monthSalary * 12 + projectSalary; ,多態(tài)(A sample),public interface People public int yearSalary(); ,public cl
20、ass Worker implements People private int monthSalary ; public Worker(int monthSalary) this.monthSalary = monthSalary public int yearSalary() return monthSalary * 12 ,2011-05-03,31,多態(tài)(A sample),public class Calculation private int totalSalary ; public int getTotalSalary() return totalSalary; public v
21、oid add(People s) totalSalary += s.yearSalray(); ,public class Test public static void main(String args) Worker w = new Worker(1000); Engineer e = new Engineer(2000, 5000); Calculation c = new Calculation() ; c.add(w); c.add(e); System.out.println(c.getTotalSalary(); ,2011-05-03,32,instanceof運算符,使用運
22、算符instanceof可以得到對象的類型 if(a instanceof ClassB) ClassB b = (ClassB)a; else if(a instanceof ClassC) ClassC c = (ClassC)a; else ClassD d = (ClassD)a; ,2011-05-03,33,對象造型(Casting),所謂造型就是Java對象間的類型轉(zhuǎn)換 Java的對象造型可以分為兩種情況: 自動造型upcasting 強制造型downcasting 在造型前可以使用instanceof運算符測試一個對象的類型 對象的造型只用在有繼承關(guān)系的對象之間,2011-05
23、-03,34,作業(yè),定義一個接口,接口必須含有一個方法, 用一個實現(xiàn)類去實現(xiàn)他. 深入了解javax.swing.Timer定時器實現(xiàn)的原理. 繼續(xù)完成工資統(tǒng)計系統(tǒng), 增加業(yè)務(wù)員類型, 年薪方式為月薪*12 + 全年銷售額*2% 公司共有工人10名, 工程師20名,業(yè)務(wù)員5名, 統(tǒng)計公司全年的工資發(fā)放額.,2011-05-03,35,作業(yè),分析下面程序: class Base String s = “class:Super”; public int add(int a, int b) return a+b; static public int minus(int a, int b) retur
24、n a-b; class Sub extends Base String s = “class:Sub”; public float add(float a, float b) return a+b; public int add(int a, int b) return 2*a + b; ,public class TestClass public static void main(String args) Base parent = new Sub(); System.out.println(parent.s + n + parent.add(1,2) + n + parent.minus
25、(1,2); Sub son = (Sub)parent; System.out.println(son.s + n + son.add(1,2) + n + son.minus(1,2) + n + son.add(1.0f, 2.0f); ,2011-05-03,36,高級類特性(下),ID:SCSJ001-Java Basic Syntax,2011-05-03,37,高級類特性(下),內(nèi)部類 修飾符的適用范圍,2011-05-03,38,內(nèi)部類(inner class)(示例7-11),允許一個類的定義出現(xiàn)在另一個類中,將處于另一個類中的“寄生類”稱為“內(nèi)部類”(inner class),也稱為“類屬類” 這樣的一組類在邏輯上是一個整體,內(nèi)部類和外層封裝它的類之間存在邏輯上的從屬關(guān)系 內(nèi)部類對其封裝類的內(nèi)部成員有訪問權(quán)限,2011-05-03,39,內(nèi)部類的例子,public class Outer1 pri
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年張家港市第一人民醫(yī)院自主招聘編外合同制衛(wèi)技人員備考題庫完整答案詳解
- 2026年慶陽職業(yè)技術(shù)學院公開引進高層次急需緊缺人才12人備考題庫及一套完整答案詳解
- 2026年華南師范大學環(huán)境學院非事業(yè)編制人員招聘備考題庫參考答案詳解
- 2026年廈門市前埔南區(qū)小學非在編人員招聘備考題庫及完整答案詳解一套
- 2026年分子細胞卓越中心孟飛龍組招聘實驗室技術(shù)員備考題庫附答案詳解
- 2026年中北大學招聘備考題庫及1套參考答案詳解
- 2026年中船黃岡貴金屬有限公司招聘備考題庫及答案詳解參考
- 2026年中國安能集團第二工程局有限公司招聘備考題庫及參考答案詳解一套
- 2026年平潭綜合實驗區(qū)公開招聘高端人才備考題庫及完整答案詳解一套
- 2026年中外運物流投資控股有限公司招聘備考題庫及一套完整答案詳解
- 2025年國資委主任年終述職報告
- 大學教學督導(dǎo)與課堂質(zhì)量監(jiān)控工作心得體會(3篇)
- 2025年下半年國家教師資格幼兒園《綜合素質(zhì)》考試真題及參考答案
- 項目專家評審意見書標準模板
- 評審委托協(xié)議書
- 黑龍江中醫(yī)藥大學《無機化學》2025 學年第二學期期末試卷
- 2025年高中計算機操作試題題庫及答案
- 研學基地課程書籍或課件
- 杭州市西湖區(qū)人民政府西溪街道辦事處公開招聘編外合同制工作人員5人考試筆試備考試題及答案解析
- 日本所有番號分類
- 2024年江蘇省普通高中學業(yè)水平測試小高考生物、地理、歷史、政治試卷及答案(綜合版)
評論
0/150
提交評論