一,、 繼承的基本概念及其限制 繼承:就是擴展已有類的功能,在繼承中分為子類和父類,,父類有時候也稱為超類(super class),子類有時候稱為派生類,。 繼承的基本語法為:class子類 extends 父類 {} 繼承的限制:1)在java中不允許多重繼承,一個子類只能繼承一個父類,,不能繼承多個父類,;2)java中允許多層繼承;3)在繼承中子類不能訪問父類中的私有成員,,只能繼承公共操作,。但是私有成員可以通過公共方法得到訪問。 二,、 this關(guān)鍵字和super關(guān)鍵字的區(qū)別 this在java中變現(xiàn)出以下的概念: 1) 調(diào)用類中的屬性:this.屬性 2) 調(diào)用類中的方法:this.方法() 3) 調(diào)用類中的構(gòu)造方法:this() 4) 表示當(dāng)前對象:this 所有的構(gòu)造方法應(yīng)該是在對象操作之前最早調(diào)用的,,所以用this調(diào)用類中其他構(gòu)造方法的時候,該代碼必須放在構(gòu)造方法中的首行,。需要注意:在使用this調(diào)用構(gòu)造方法的時候必須至少有一個構(gòu)造方法沒有使用this()調(diào)用的,,而此方法將作為程序的出口,一般情況下這個出口定義為無參構(gòu)造方法,。
三,、 重載和覆寫的區(qū)別 四,、子類的初始化過程 子類在實例化的時候,首先調(diào)用的永遠(yuǎn)都是父類的構(gòu)造方法,。構(gòu)造方法的作用是為類的屬性進(jìn)行初始化,。在實例化子類之前,先將父類實例化,。在實際的代碼中,,如果子類的構(gòu)造方法中沒有顯示的調(diào)用父類的構(gòu)造方法,會默認(rèn)的添加上super()方法用來調(diào)用父類的無參構(gòu)造方法,。如果此時父類中沒有無參的構(gòu)造方法,,程序編譯將出現(xiàn)錯誤。這時,,要么顯示的為子類構(gòu)造函數(shù)中添加super(參數(shù))來調(diào)用父類中帶參數(shù)的構(gòu)造方法,,或者為父類添加無參的構(gòu)造方法。 五,、 一個開發(fā)原則 在程序開發(fā)中要記住一個原則:一個類不要去繼承一個已經(jīng)實現(xiàn)好的類,,要么去繼承抽象類,要么去實現(xiàn)接口,。 六,、 一個重要題目 現(xiàn)在要求定義一個數(shù)組類(Array),該類中包含一個整型數(shù)組,但是該整型數(shù)組的大小事動態(tài)分配的,。即:所有的大小由程序決定,,并且實現(xiàn)下面兩個子類: u 反轉(zhuǎn)類:可以將數(shù)組的內(nèi)容反轉(zhuǎn)排列 u 排序類:可以對數(shù)組進(jìn)行排序的操作
class Array{ private int[] temp = null ; // 聲明一個整型數(shù)組 private int foot ; // 定義增加記錄的腳標(biāo) public Array(int len){ if(len>0){ this.temp = new int[len] ; // 如果傳過來的數(shù)據(jù)大于0,,可以開辟 }else{ this.temp = new int[1] ; // 最少維持1個數(shù)組大小 } } public boolean add(int t){ // 增加元素 if(this.foot class SortArray extends Array{ // 排序類 public SortArray(int len){ // 在子類的構(gòu)造方法中必須明確的調(diào)用父類的構(gòu)造方法 super(len) ; } public int[] getArray(){ java.util.Arrays.sort(super.getArray()) ; // 排序 return super.getArray() ; // 返回排序后的結(jié)果 }};public class ExecDemo01{ public static void main(String args[]){ SortArray arr = new SortArray(5) ; // 開辟5個大小的整型數(shù)組 System.out.println(arr.add(11)) ; System.out.println(arr.add(2)) ; System.out.println(arr.add(33)) ; System.out.println(arr.add(4)) ; System.out.println(arr.add(0)) ; System.out.println(arr.add(6)) ; print(arr.getArray()) ; } public static void print(int temp[]){ // 打印數(shù)組 for(int x:temp){ System.out.print(x + ',、') ; } }}; class ReverseArray extends Array{ // 排序類 public ReverseArray(int len){ // 在子類的構(gòu)造方法中必須明確的調(diào)用父類的構(gòu)造方法 super(len) ; } public int[] getArray(){ int x[] = new int[super.getArray().length] ; // 以父類中的數(shù)組大小進(jìn)行開辟 int count = x.length - 1 ; for(int i=0;i 在本道程序中融合了以下的知識點: 1,、 繼承的基本概念:擴充了類的功能 2,、 方法的覆寫的作用 3、 引用傳遞 4,、 數(shù)組的排序,、foreach輸出 七、 final關(guān)鍵字(重點) final關(guān)鍵字可以用來做以下聲明: 1) 聲明類:由final聲明的類不能有子類,; 2) 聲明方法:由final聲明的方法不能被子類覆寫,; 3) 聲明變量:由final聲明的變量就成為常量,常量的內(nèi)容不能改變 在java中用final聲明的變量為常量,,這個常量的標(biāo)示符一般全部用大寫字母表示,。 在java中也存在一個很重要的概念:全局變量,用public static final來聲明,。 八,、 抽象類和接口的基本概念和應(yīng)用 1、抽象類:包含一個抽象方法的類為抽象方法,,抽象方法是只聲明而沒有實現(xiàn)的方法,,所有的抽象方法必須用abstract關(guān)鍵字聲明,所有的抽象類也必須用abstract關(guān)鍵字聲明,。 對抽象類來講,,抽象類是不能直接實例化的,但是可以聲明,,如果要想使用抽象類,,則必須依靠其子類,抽象類是必須要被子類繼承的,,繼承抽象類的子類要實現(xiàn)抽象類中的所有抽象方法,。 抽象類是不能用final關(guān)鍵字來聲明的,因為抽象類必須被子類繼承,,而final聲明的類不能有子類,; 抽象類是可以有構(gòu)造方法的,但是這個構(gòu)造方法不能直接調(diào)用,,是交給子類去調(diào)用的,,實際上子類的實例化過程,永遠(yuǎn)是先調(diào)用父類的構(gòu)造方法,。而且,,抽象類中的屬性如果想初始化,,則必須依賴其構(gòu)造方法。 2.接口:接口是一個特殊的類,,在java中接口是由抽象方法和全局變量組成的,,用interface定義一個接口,子類通過implements來實現(xiàn)一個接口,。 一個類雖然只能繼承一個父類,,但是可以同時實現(xiàn)多個接口。 3,、對象多態(tài)性 多態(tài)性是整個java中最重要的一個概念,,因為有多態(tài)性的存在,程序的靈活性才能實現(xiàn),。多態(tài)性是面向?qū)ο蟮淖詈笠粋€特征: 1) 方法重載和方法覆寫其實就是多態(tài)性的一種體現(xiàn),; 2) 真正的多態(tài)性包括一種叫做對象多態(tài)性的概念: |-對象的多態(tài)性主要是指,子類和父類的對象之間的相互轉(zhuǎn)化,; |-向上轉(zhuǎn)型:父類父類對象 =子類實例 à自動完成 |-向下轉(zhuǎn)型:子類子類對象 =(子類)父類對象 à強制完成 Java提供了instanceof方法來判斷一個對象是否屬于一個類 對象 instanceof類 à返回boolean類型的結(jié)果值,,true或者false. 為了保證對象的向下轉(zhuǎn)型的操作能夠成功,最好在轉(zhuǎn)型之前使用instanceof來判斷一下是否屬于該類,; 在繼承關(guān)系中,,父類的設(shè)計是很重要的,如果父類設(shè)計的比較好,,代碼編輯起來會很方便,。 抽象類最大的用處就是模板設(shè)計。 九,、 抽象類和接口的區(qū)別(絕對重點) 10,、 object類 。toString():在對象打印時調(diào)用,; ,。equals():完成對象的比較工作。
|
|