多態
多態包括兩種 方法的重載和重寫 對象的向上和向下轉型
一、方法的重載和重寫
重載與重寫的區別:
方法重載指的是,在同一個類中,允許多個方法名相同,參數列表不同(類型,個數,順序)即可,與訪問控制符、返回值、異常無關。
方法的重寫指的是,在繼承中如果父類中某個方法不能滿足子類的需求,子類可以重寫父類中的該方法。重寫時,方法名、返回值類型、參數列表都必須和父類中該方法一樣,子類中的訪問控制符不能比父類更嚴格。如果父類中的該方法使用private修飾,在子類中就不叫重寫(因爲子類根本無法訪問該方法)。
重載重寫對比
|
位置 |
方法名 |
參數列表 |
返回值 |
訪問控制符 |
重載 |
同一類中 |
一樣 |
不一樣 |
無關 |
無關 |
重寫 |
父類和子類 |
一樣 |
一樣 |
一樣 |
子類不能比父類嚴格 |
二、對象的向上和向下轉型
1、向上轉型之後只能調用父類裏的有的方法;
2、向上轉型後,如果調用的方法在子類中重寫,那麼調用的就是重寫後的方法;
3、向下轉型之前要經歷向上轉型;
規律:多態時,能調用哪些方法看前面,調用方法的效果看後邊(指的是構造方法), 屬性的值看前邊。
抽象類
用abstract修飾的類是抽象類。抽象方法不能使用private修飾
1、一個類如果有抽象方法,那麼這個類一定是抽象類;
2、抽象類中不一定有抽象方法;
3、抽象類可以寫構造方法;
4、抽象類不能實例化。
5、抽象方法只需要聲明不需要實現
6、抽象類不能創建對象,無法使用new關鍵字調用抽象方法的構造方法創建對象。即使抽象類中包含構造方法該類也不能創建對象。
7、子類繼承抽象類時,必須要重寫抽象類中的所有抽象方法(如果子類也是抽象類可以不重寫)
接口 ------更徹底的抽象類
接口的特點:
1、接口中所有方法都是抽象方法;
2、接口是單繼承,但一個類可以實現多個接口(實現了多繼承);
3、接口不能實例化、接口沒有構造方法。
4、接口中的方法全部都是抽象方法,常量全部都是靜態常量。
5、當一個類實現某個接口時,它必須實現該類中的所有的抽象方法,除非這個類定義爲抽象類。
接口的作用:規範代碼。接口繼承接口用extends,可以多繼承。
包裝類
一、Java中八大基本類型的基本數據初始值都爲0;而包裝類的初始值爲null.
二、下面是wo包裝類常用的轉換
1、int 類型轉換爲字符串
int a=0;
String s=a+""; 0的字符串
2、字符串轉成int 類型
String i="10";
int i2=Integer.parseInt(i);
3、字符串轉成Boolean
String b="true";
Boolean b1=Bolean.paresBoolean(b);
三、這是我找的一個面試題,可以研究下:
有這個一個九位數,它由123456789組成,每個數字出現僅切出一次,數字的前一位能被1整除,前2位能被2整除......前九位能被9整除,求這個數字。
異常
重點掌握:
try,catch,finally,throws,throw五個關鍵字
try{
可能發生異常的代碼塊;
}catch(Exception e){
異常處理代碼塊;
}finally{
必須執行的代碼塊;
}
下面是我做的一個案例:
捕獲多個異常
注意:使用多重catch語句時,異常子類一定要位於異常父類之前
★throws 處理異常(拋出異常)
★throw 拋出自定義異常
Final、finally、finalize的區別
Final修飾類:類不可被繼承
Final修飾變量:變量值不可變
Final修飾方法:方法不可被重寫
Finally用於捕獲異常 try catch finally語句
Finalize用於處理垃圾回收
多線程
創建多線程
★繼承Thread類,重寫run方法
◆語法:
class Test extends Thread{//繼承Thread類
public void run() {//重寫run方法
//方法體
}
}
★實現Runnable接口,實現run方法
◆語法:
class Test implements Runnable{//實現Runnabel接口
public void run() {//實現run方法
//方法體
}
}
創建線程的方法對比:
|
優點 |
缺點 |
繼承Thread類 |
簡單 |
無法再繼承其他類 無法實現資源共享 |
實現Runnable接口 |
可以繼承其他類 可以實現資源共享 |
複雜 |
在開發張大多數情況下選擇使用實現Runnable接口的方式來創建線程。
集合
list set map ArrayList
set和list都是儲存數據,set存放的數據不重複,是無序的;list可以吧存放重複數據,是有序的;map以鍵值對的形式存放數據。
ArrayList和LinkedList的區別
ArrayList存放的數據是有序的(順序排放)
linkedList的數據是指向排放的,常用於數據的插入,刪除,修改。
這是他們內存的一個分析: