站長www.software8.co

          熱轉印www.heatpress123.net

          Java__內(nèi)部類,抽象類,繼承,接口,異常的處理...等

          抽象類的特點: 1,抽象方法一定在抽象類中。 2,抽象方法和抽象類都必須被abstract關鍵字修飾。 3,抽象類不可以用new創(chuàng)建對象。因為調(diào)用抽象方法沒意義。 4,抽象類中的抽象方法要被使用,必須由子類復寫起所有的抽象方法后,建立子類對象調(diào)用。 如果子類只覆蓋了部分抽象方法,那么該子類還是一個抽象類。 抽象類和一般類沒有太大的不同。 抽象類比一般類多個了抽象函數(shù)。就是在類中可以定義抽象方法。 抽象類不可以實例化。 特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對象。 abstract 關鍵字,和哪些關鍵字不能共存。 final:被final修飾的類不能有子類。而被abstract修飾的類一定是一個父類。 private: 抽象類中的私有的抽象方法,不被子類所知,就無法被復寫。 而抽象方法出現(xiàn)的就是需要被復寫。 static:如果static可以修飾抽象方法,那么連對象都省了,直接類名調(diào)用就可以了。 可是抽象方法運行沒意義。 抽象類中有構造函數(shù),因為抽象類是一個父類,要給子類提供實例的初始化。 繼承: 1,提高了代碼的復用性。 2,讓類與類之間產(chǎn)生了關系。有了這個關系,才有了多態(tài)的特性。 注:不要為了獲取其他類的功能,簡化代碼而繼承。 必須是類與類之間有所屬關系才可以繼承。所屬關系 is a。 Java語言中:java只支持單繼承,不支持多繼承。 因為多繼承容易帶來安全隱患:當多個父類中定義了相同功能, 當功能內(nèi)容不同時,子類對象不確定要運行哪一個。 但是java保留這種機制。并用另一種體現(xiàn)形式來完成表示。多實現(xiàn)。 java支持多層繼承。也就是一個繼承體系 子父類中的函數(shù)。 當子類出現(xiàn)和父類一模一樣的函數(shù)時, 當子類對象調(diào)用該函數(shù),會運行子類函數(shù)的內(nèi)容。 如同父類的函數(shù)被覆蓋一樣。 這種情況是函數(shù)的另一個特性:重寫(覆蓋) 當子類繼承父類,沿襲了父類的功能,到子類中, 但是子類雖具備該功能,但是功能的內(nèi)容卻和父類不一致, 這時,沒有必要定義新功能,而是使用覆蓋特殊,保留父類的功能定義,并重寫功能內(nèi)容。 覆蓋: 1,子類覆蓋父類,必須保證子類權限大于等于父類權限,才可以覆蓋,否則編譯失敗。 2,靜態(tài)只能覆蓋靜態(tài)。 重載:只看同名函數(shù)的參數(shù)列表。 重寫:子父類方法要一模一樣。 3,子父類中的構造函數(shù)。 在對子類對象進行初始化時,父類的構造函數(shù)也會運行, 那是因為子類的構造函數(shù)默認第一行有一條隱式的語句 super(); super():會訪問父類中空參數(shù)的構造函數(shù)。而且子類中所有的構造函數(shù)默認第一行都是super(); 子類一定要訪問父類中的構造函數(shù)。因為父類中的數(shù)據(jù)子類可以直接獲取。所以子類對象在建立時,需要先查看父類是如何對這些數(shù)據(jù)進行初始化的。所以子類在對象初始化時,要先訪問一下父類中的構造函數(shù)。 如果要訪問父類中指定的構造函數(shù),可以通過手動定義super語句的方式來指定。 注:super語句一定定義在子類構造函數(shù)的第一行。 當父類中沒有空參數(shù)的構造函數(shù)時,子類必須手動通過super語句形式來指定要訪問父類中的構造函數(shù)。 子類的構造函數(shù)第一行也可以手動指定this語句來訪問本類中的構造函數(shù)。 子類中至少會有一個構造函數(shù)會訪問父類中的構造函數(shù)。 final : 最終。作為一個修飾符, 1,可以修飾類,函數(shù),變量。 2,被final修飾的類不可以被繼承。為了避免被繼承,被子類復寫功能。 3,被final修飾的方法不可以被復寫。 4,被final修飾的變量是一個常量只能賦值一次,既可以修飾成員變量,有可以修飾局部變量。 當在描述事物時,一些數(shù)據(jù)的出現(xiàn)值是固定的,那么這時為了增強閱讀性,都給這些值起個名字。方便于閱讀。而這個值不需要改變,所以加上final修飾。作為常量:常量的書寫規(guī)范所有字母都大寫,如果由多個單詞組成。 5,內(nèi)部類定義在類中的局部位置上是,只能訪問該局部被final修飾的局部變量。 接口:初期理解,可以認為是一個特殊的抽象類 當抽象類中的方法都是抽象的,那么該類可以通過接口的形式來表示。 class用于定義類 interface 用于定義接口。 接口定義時,格式特點: 1,接口中常見定義:常量,抽象方法。 2,接口中的成員都有固定修飾符。 常量:public static final 方法:public abstract 記住:接口中的成員都是public的。 接口:是不可以創(chuàng)建對象的,因為有抽象方法。 需要被子類實現(xiàn),子類對接口中的抽象方法全都覆蓋后,子類才可以實例化。 否則子類是一個抽象類。 接口可以被類多實現(xiàn),也是對多繼承不支持的轉換形式。java支持多實現(xiàn)。 內(nèi)部類的訪問規(guī)則: 1,內(nèi)部類可以直接訪問外部類中的成員,包括私有。 之所以可以直接訪問外部類中的成員,是因為內(nèi)部類中持有了一個外部類的引用,格式 外部類名.this 2,外部類要訪問內(nèi)部類,必須建立內(nèi)部類對象。 訪問格式: 1,當內(nèi)部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中。 可以直接建立內(nèi)部類對象。 格式 外部類名.內(nèi)部類名 變量名 = 外部類對象.內(nèi)部類對象; Outer.Innerin = new Outer().new Inner(); 2,當內(nèi)部類在成員位置上,就可以被成員修飾符所修飾。 比如,private:將內(nèi)部類在外部類中進行封裝。 static:內(nèi)部類就具備static的特性。 當內(nèi)部類被static修飾后,只能直接訪問外部類中的static成員。出現(xiàn)了訪問局限。 在外部其他類中,直接訪問static內(nèi)部類的非靜態(tài)成員 newOuter.Inner().function(); 在外部其他類中,直接訪問static內(nèi)部類的靜態(tài)成員 uter.Inner.function(); 注:當內(nèi)部類中定義了靜態(tài)成員,該內(nèi)部類必須是static的。 當外部類中的靜態(tài)方法訪問內(nèi)部類時,內(nèi)部類也必須是static的。 class Body { privateclass XinZang { } publicvoid show() { newXinZang(). } } 內(nèi)部類定義在局部時, 1,不可以被成員修飾符修飾 2,可以直接訪問外部類中的成員,因為還持有外部類中的引用。 但是不可以訪問它所在的局部中的變量。只能訪問被final修飾的局部變量。 匿名內(nèi)部類: 1,匿名內(nèi)部類其實就是內(nèi)部類的簡寫格式。 2,定義匿名內(nèi)部類的前提: 內(nèi)部類必須是繼承一個類或者實現(xiàn)接口。 3,匿名內(nèi)部類的格式: new 父類或者接口(){定義子類的內(nèi)容} 4,其實匿名內(nèi)部類就是一個匿名子類對象。而且這個對象有點胖。 可以理解為帶內(nèi)容的對象。 5,匿名內(nèi)部類中定義的方法最好不要超過3個。 class Outer { intx = 3; voidmethod(final int a) { finalint y = 4; classInner { voidfunction() { System.out.println(y); } } newInner().function(); } } class InnerClassDemo3 { publicstatic void main(String[] args) { Outerout = new Outer(); out.method(9); out.method(7); } } 繼承: 特點: 1,提高了代碼的復用性。 2,讓類與類之間產(chǎn)生關系,是多態(tài)性的前提。 Java中的繼承。 1,java只支持單繼承,不支持多繼承。因為繼承了多個父類如果有相同方法時,子 類對象不確定運行哪一個。 2,Java還支持多層繼承。A-->B--->C 原來可以形成繼承體系。 想要使用體系功能,"查閱父類功能,建立子類對象調(diào)用功能。" 注:父類的由來其實是由事物中的共性內(nèi)容不斷向上抽取而來的。 所以父類中定義的是該體系中的最基本,最共性功能。 繼承出現(xiàn)后,代碼上特點: 1,變量。 當子父類中定義了相同的名稱的成員變量, 子類要使用父類中的同名變量時,需要使用關鍵字super來區(qū)分。 一般不會出現(xiàn)這種情況,因為父類中有了,子類不需要定義。 而且父類定義時,一般變量都私有化。 2,函數(shù)。 子類可以直接訪問父類中非私有的成員函數(shù)。 特殊情況:當子類中定義了與父類一模一樣的方法時,會發(fā)生覆蓋操作。大多指的是非靜態(tài)方法。 最終會運行子類的方法,父類相當于被覆蓋了。 函數(shù)的另一個特性:覆蓋(重寫,復寫)。 什么時候用 當父類的功能要被修改時,不建議修改源碼。只要通過一個類繼承原有類,定義一個新的升級后的功能即可。但是功能是相同的,只是實現(xiàn)方法改變。這是子類可以沿襲父類中的功能定義, 并重寫功能內(nèi)容。這就是覆蓋。 注意事項: 1,子類覆蓋父類時,必須權限要大于等于父類權限。 2,靜態(tài)不能覆蓋非靜態(tài)。 3,構造函數(shù)。 構造函數(shù)可以本類進行對象初始化,也可以給子類對象進行初始化。 子類對象初始化過程: 子類中的所有構造方法都會訪問父類中空參數(shù)的構造函數(shù), 因為每一個構造函數(shù)的第一行,都有一句隱式的super語句。 為什么要有這條語句? 因為子類會獲取到父類中的數(shù)據(jù),必須要先明確父類對數(shù)據(jù)的初始化過程。 當父類中沒有空參數(shù)構造函數(shù)時,子類構造函數(shù)必須通過super句來明確要訪問的父類中指定的構造函數(shù)。 當時子類構造函數(shù)也可以通過this語句訪問本類中的構造函數(shù)。 但是子類中肯定,至少有一個構造函數(shù)會訪問父類。 抽象類:在分析事物時,事物中的功能有些是不明確的內(nèi)容的。這些不明確內(nèi)容就是抽象的。 可以通過抽象函數(shù)來描述。 抽象函數(shù)一定要定義在抽象類中,因為,抽象函數(shù)所在類,也必須被抽象標識。 寫法特點: 1,抽象函數(shù)只對函數(shù)進行聲明,沒有函數(shù)主體。 2,抽象類和抽象函數(shù)都需要用abstract修飾。 3,抽象類不可以進行實例化。 4,想要使用抽象功能,必須通過子類覆蓋了父類中所有的抽象方法后,才可以對子類實例化。 如果只覆蓋了部分抽象方法,那么子類還是一個抽象類。 也可以理解為:抽象類是一個父類,是不斷向上抽取而來的, 在抽取過程中,只抽取了方法聲明,但沒有抽取方法實現(xiàn)。 抽象類和一半類差不多。 區(qū)別: 抽象類可以定義抽象方法。 抽象類不可以建立對象。 抽象類一樣用于描述事物,既可以定義抽象方法,也可以定義非抽象方法。 接口 初期理解:接口看上去是一個特殊的抽象類。里面存的都是抽象方法。 特點: 格式: 1,通過interface來定義。 2,接口中常見成員:常量,抽象方法。 而且這些成員都有固定的修飾符。 常量:public static final 方法:public abstract 3,接口中的成員都是共有的。 4,一個類可以對接口進行多實現(xiàn),用多實現(xiàn)方法來體現(xiàn)多繼承的特性。 5,一個類可以繼承一個類的同時,實現(xiàn)多個接口。 6,接口與接口之間是繼承關系,而且可以多繼承。 應用特點: 1,接口是對外暴露的規(guī)則。 2,接口是功能的擴展。 3,接口的出現(xiàn)降低了耦合性。 抽象類和接口異同: 相同: 1,都可以在內(nèi)部定義抽象方法。 2,通常都在頂層。 3,都不可以實例化,都需要子類來實現(xiàn)。 不同點: 1,抽象類中可以定義抽象方法和非抽象方法, 而接口中只能定義抽象方法。 2,接口的出現(xiàn)可以多實現(xiàn)。 抽象類只能單繼承。 也就是說:接口的出現(xiàn)避免了單繼承的局限性。 3,繼承和實現(xiàn)的關系不一致。繼承:is a,實現(xiàn):like a 異常:就是程序在運行時出現(xiàn)不正常情況。 異常由來:就是java對不正常情況進行描述后的對象體現(xiàn)。 對于問題的劃分:兩種:一種是嚴重的問題,一種非嚴重的問題。 對于嚴重的,java通過Error類進行描述。 對于Error一般不編寫針對性的代碼對其進行處理。 對與非嚴重的,java通過Exception類進行描述。 對于Exception可以使用針對性的處理方式進行處理。 無論Error或者Exception都具有一些共性內(nèi)容。 比如:不正常情況的信息,引發(fā)原因等。 Throwable |--Error |--Exception 2,異常的處理 java 提供了特有的語句進行處理。 try { 需要被檢測的代碼; } catch(異常類變量) { 處理異常的代碼;(處理方式) } finally { 一定會執(zhí)行的語句; } 3,對捕獲到的異常對象進行常見方法操作。 StringgetMessage():獲取異常信息。 class Demo { intdiv(int a,int b)throws Exception//在功能上通過throws的關鍵字聲明了該功能有可能會出現(xiàn)問題。 { returna/b; } } class ExceptionDemo { publicstatic void main(String[] args) { Demod = new Demo(); try { intx = d.div(4,1); System.out.println("x="+x); } catch(Exception e)//Exception e = new ArithmeticException(); { System.out.println("除零啦"); System.out.println(e.getMessage());// / by zero; System.out.println(e.toString());//異常名稱 :異常信息。 e.printStackTrace();//異常名稱,異常信息,異常出現(xiàn)的位置。 //其實jvm默認的異常處理機制,就是在調(diào)用printStackTrace方法。 //打印異常的堆棧的跟蹤信息。 } System.out.println("over"); } } 自定義異常: 必須是自定義類繼承Exception。 繼承Exception原因: 異常體系有一個特點:因為異常類和異常對象都被拋出。 他們都具備可拋性。這個可拋性是Throwable這個體系中獨有特點。 只有這個體系中的類和對象才可以被throws和throw操作。 throws和throw的區(qū)別 throws使用在函數(shù)上。 throw使用在函數(shù)內(nèi)。 throws后面跟的異常類。可以跟多個。用逗號隔開。 throw后跟的是異常對象。 自定義異常時:如果該異常的發(fā)生,無法在繼續(xù)進行運算, 就讓自定義異常繼承RuntimeException。 對于異常分兩種: 1,編譯時被檢測的異常。 2,編譯時不被檢測的異常(運行時異常。RuntimeException以及其子類)

          posted on 2012-10-18 14:31 文哥哥 閱讀(205) 評論(0)  編輯  收藏

          <2012年10月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          友情鏈接

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 津南区| 石狮市| 黑水县| 博爱县| 商南县| 正宁县| 广宁县| 桃园县| 花垣县| 镇坪县| 栾川县| 河间市| 延津县| 新密市| 即墨市| 浠水县| 都江堰市| 陈巴尔虎旗| 富阳市| 潜江市| 桃源县| 镇赉县| 和平区| 岐山县| 马尔康县| 蕉岭县| 军事| 蓬安县| 兴山县| 都安| 仲巴县| 潼南县| 乌拉特后旗| 子长县| 如东县| 阿拉尔市| 息烽县| 策勒县| 右玉县| 莱西市| 天长市|