方法的過載與重寫的關係(區別);static關鍵字;單例設計模式;繼承;
阿新 • • 發佈:2018-12-31
方法的引數傳遞(值傳遞 引用傳遞)
基本資料型別:值傳遞:當引數型別為基本資料型別的時候 傳遞的是值 出了方法 原有值不改變
引用資料型別:引用傳遞:當引數型別為引用資料型別的時候 傳的是堆記憶體中的地址 可以改變 堆記憶體中地址對應的資料
static關鍵字
static靜態
優點,
1.節省資源,可以把共性的東西抽取出來設定為靜態 共有
2.靜態修飾的成員 優先於物件載入入記憶體 隨著類的載入而載入
3.當成員被靜態修飾後,多了一種呼叫方式 類名。靜態成員
總結:與類相關的 與物件無關
修飾成員變數:
所屬: static修飾靜態成員變數屬於類 叫類變數
static修飾非靜態成員變數屬於物件,例項變數
記憶體: 靜態 儲存於方法區的靜態區
非靜態: 堆記憶體
出現時間不同,呼叫不同
修飾成員方法
語法:
訪問許可權修飾符 static 返回值型別 方法名(形參){
//方法體
}
注意:
1.靜態方法 只能訪問靜態成員
非靜態既可以訪問靜態 也可以訪問非靜態
靜態方法中 不可以定義 this / super關鍵字
因為靜態優先於物件存在 所以靜態方法中不可以 出現非靜態的this/super的成員 靜態只能訪問靜態
總結:利: 將物件共享的資料進行單獨儲存 節省空間 可以直接用類名呼叫
弊: 生命週期過長 訪問出現侷限性 靜態雖好 只能訪問靜態
public static void main(String[] args) {
}
1.public 訪問許可權修飾符 (訪問許可權最大控制符)
2.static 靜態的 隨著類的載入 進入記憶體
3.void 不確定的範圍值 當前jvm 不需要這個方法帶回返回值
4.main 不是個關鍵字 jvm識別這個方法名 程式的入口
5.String[]:存放String型別資料的陣列 可以接收鍵盤錄入
6.args 陣列名 不是關鍵字 arguments引數的意思
二、工具類
什麼叫工具類?
將某些共性的功能抽取出來 單獨封裝Java類 這樣提高了複用性
類ArrayTool
練習:
1.獲取最大值
2.陣列的遍歷
工具類:私有化建構函式 因為不需要在其他類中創 建物件
將所有方法用static修飾 可以類名.呼叫
靜態程式碼塊
static{
}
隨著類的載入而執行 只執行一次
並有優先於主函式 沒名字比有名字的快
用於給類初始化的
****一般用於載入驅動
構造程式碼塊{
}
單例設計模式
模式:解決一件事最快的方法,最有效的方法
Java中有23種設計模式
設計模式 是純理論 純思想
3步:
1.將建構函式私有化
2.在本類中建立一個本類物件
3.提供一個方法可以獲取該類物件
餓漢式 : 先初始化物件
private Single(){}
private static Single s = new Single();
public static Single getSingle(){
return s;
}
懶漢式 : 物件是方法被呼叫時 才初始化 也叫作延時載入
private Single(){}
private static Single s = null;
public static Single getSingle(){
if(s == null){
s = new Single();
}
return s;
}
繼承:
父類(超類):super
優點:1.提高程式碼的複用性 少寫程式碼
2.讓類與類之間產生關係 有了這個關係 才 有了多型 是多型的前提
類與類之間 有共性的關係 抽取出來的是父類
子類繼承父類 必須有關係
class A{
void demo1(){}
void demo2(){}
}
class B extends A{
void demo1(){}
void demo3(){}
}
缺點:
1.類的耦合性增強了
開發原則:高內聚,低耦合
只能單繼承,不支援多繼承
但是支援多層繼承
想要呼叫父類的成員變數用super.name(this.name)
1.想要使用體系,先查閱父類的描述 因為父類中定義的是該體系中共性的功能通過了解共性功能 你就能知道該體系的基本功能 那麼這個體系基本已經可用了
this:代表本類物件的引用
super:代表父類物件的引用
繼承中成員方法的關係
同名:
就近原則
不同名:
直接呼叫
方法的重寫:
子父類出現了一模一樣的方法
重寫有什麼用?
提高了程式碼的擴充套件性當子類需要父類的功能,而功能主體 子類特有的內容時,可以重寫父類中的功能這樣 即沿襲了父類的功能 又定義了子類的特有內容
注意事項:
1.父類私有方法 子類不能被重寫
2.子類重寫父類方法時 訪問許可權不能更低(大於等於) 否則編譯失敗//private < 預設 < public 許可權越來越小 那麼繼承體系 就崩潰了
重寫:一模一樣
繼承中構造方法的關係
class Anomal{
String color;
int leg;
public void eat(){
System.out.println("吃飯");
}
public void sleep(){
System.out.println("睡覺");
}
}
class cat extends Anomal
{
}
class Dog extends Anomal
{
}
問題: 重寫與過載的區別:
過載:在同一個類中,方法名相同,引數列表不 同,與返回值無關。
優點:過載方法可以使得程式更加清楚,以及更加具有可讀性
缺點:會產生歧義,導致編譯錯誤:例:
public static double max(int num1,double num2){
if(num1>num2){
return num1;
}else{
return num2;
}
public static double max(double num1,int num2){
if(num1>num2){
return num1;
}else{
return num2;
}
}
}
重寫:子父類出現了一模一樣的方法
作用:子類修改父類中定義的方法的實現
注意:1.當例項是可以訪問時,他才能被覆蓋。因為私有方法在他類本身以外是不能被訪問的,所以不能被覆蓋,如果子類中定義的方法在父類中是私有的,那麼這兩個方法沒有關係。
2.與例項方法一樣,靜態方法也能被繼承,但是,靜態方法不能被覆蓋。如果父類中定義的靜態方法在子類中被重新定義,那麼在父類中定義的靜態方法將被隱藏,可以使用語法:父類名。靜態方法名(SuperClassName.staticMethodName)呼叫隱藏的靜態方法。
小結:過載意味著使用同樣的名字但是不同的簽名來定義多個方法。重寫意味著在子類中提供一個對方法的新的實現。
基本資料型別:值傳遞:當引數型別為基本資料型別的時候 傳遞的是值 出了方法 原有值不改變
引用資料型別:引用傳遞:當引數型別為引用資料型別的時候 傳的是堆記憶體中的地址 可以改變 堆記憶體中地址對應的資料
static關鍵字
static靜態
優點,
1.節省資源,可以把共性的東西抽取出來設定為靜態 共有
2.靜態修飾的成員 優先於物件載入入記憶體 隨著類的載入而載入
3.當成員被靜態修飾後,多了一種呼叫方式 類名。靜態成員
總結:與類相關的 與物件無關
修飾成員變數:
所屬: static修飾靜態成員變數屬於類 叫類變數
static修飾非靜態成員變數屬於物件,例項變數
記憶體: 靜態 儲存於方法區的靜態區
非靜態: 堆記憶體
出現時間不同,呼叫不同
修飾成員方法
語法:
訪問許可權修飾符 static 返回值型別 方法名(形參){
//方法體
}
注意:
1.靜態方法 只能訪問靜態成員
非靜態既可以訪問靜態 也可以訪問非靜態
靜態方法中 不可以定義 this / super關鍵字
因為靜態優先於物件存在 所以靜態方法中不可以 出現非靜態的this/super的成員 靜態只能訪問靜態
總結:利: 將物件共享的資料進行單獨儲存 節省空間 可以直接用類名呼叫
弊: 生命週期過長 訪問出現侷限性 靜態雖好 只能訪問靜態
public static void main(String[] args) {
}
1.public 訪問許可權修飾符 (訪問許可權最大控制符)
2.static 靜態的 隨著類的載入 進入記憶體
3.void 不確定的範圍值 當前jvm 不需要這個方法帶回返回值
4.main 不是個關鍵字 jvm識別這個方法名 程式的入口
5.String[]:存放String型別資料的陣列 可以接收鍵盤錄入
6.args 陣列名 不是關鍵字 arguments引數的意思
二、工具類
什麼叫工具類?
將某些共性的功能抽取出來 單獨封裝Java類 這樣提高了複用性
類ArrayTool
練習:
1.獲取最大值
2.陣列的遍歷
工具類:私有化建構函式 因為不需要在其他類中創 建物件
將所有方法用static修飾 可以類名.呼叫
靜態程式碼塊
static{
}
隨著類的載入而執行 只執行一次
並有優先於主函式 沒名字比有名字的快
用於給類初始化的
****一般用於載入驅動
構造程式碼塊{
}
單例設計模式
模式:解決一件事最快的方法,最有效的方法
Java中有23種設計模式
設計模式 是純理論 純思想
3步:
1.將建構函式私有化
2.在本類中建立一個本類物件
3.提供一個方法可以獲取該類物件
餓漢式 : 先初始化物件
private Single(){}
private static Single s = new Single();
public static Single getSingle(){
return s;
}
懶漢式 : 物件是方法被呼叫時 才初始化 也叫作延時載入
private Single(){}
private static Single s = null;
public static Single getSingle(){
if(s == null){
s = new Single();
}
return s;
}
繼承:
父類(超類):super
優點:1.提高程式碼的複用性 少寫程式碼
2.讓類與類之間產生關係 有了這個關係 才 有了多型 是多型的前提
類與類之間 有共性的關係 抽取出來的是父類
子類繼承父類 必須有關係
class A{
void demo1(){}
void demo2(){}
}
class B extends A{
void demo1(){}
void demo3(){}
}
缺點:
1.類的耦合性增強了
開發原則:高內聚,低耦合
只能單繼承,不支援多繼承
但是支援多層繼承
想要呼叫父類的成員變數用super.name(this.name)
1.想要使用體系,先查閱父類的描述 因為父類中定義的是該體系中共性的功能通過了解共性功能 你就能知道該體系的基本功能 那麼這個體系基本已經可用了
this:代表本類物件的引用
super:代表父類物件的引用
繼承中成員方法的關係
同名:
就近原則
不同名:
直接呼叫
方法的重寫:
子父類出現了一模一樣的方法
重寫有什麼用?
提高了程式碼的擴充套件性當子類需要父類的功能,而功能主體 子類特有的內容時,可以重寫父類中的功能這樣 即沿襲了父類的功能 又定義了子類的特有內容
注意事項:
1.父類私有方法 子類不能被重寫
2.子類重寫父類方法時 訪問許可權不能更低(大於等於) 否則編譯失敗//private < 預設 < public 許可權越來越小 那麼繼承體系 就崩潰了
重寫:一模一樣
繼承中構造方法的關係
class Anomal{
String color;
int leg;
public void eat(){
System.out.println("吃飯");
}
public void sleep(){
System.out.println("睡覺");
}
}
class cat extends Anomal
{
}
class Dog extends Anomal
{
}
問題: 重寫與過載的區別:
過載:在同一個類中,方法名相同,引數列表不 同,與返回值無關。
優點:過載方法可以使得程式更加清楚,以及更加具有可讀性
缺點:會產生歧義,導致編譯錯誤:例:
public static double max(int num1,double num2){
if(num1>num2){
return num1;
}else{
return num2;
}
public static double max(double num1,int num2){
if(num1>num2){
return num1;
}else{
return num2;
}
}
}
重寫:子父類出現了一模一樣的方法
作用:子類修改父類中定義的方法的實現
注意:1.當例項是可以訪問時,他才能被覆蓋。因為私有方法在他類本身以外是不能被訪問的,所以不能被覆蓋,如果子類中定義的方法在父類中是私有的,那麼這兩個方法沒有關係。
2.與例項方法一樣,靜態方法也能被繼承,但是,靜態方法不能被覆蓋。如果父類中定義的靜態方法在子類中被重新定義,那麼在父類中定義的靜態方法將被隱藏,可以使用語法:父類名。靜態方法名(SuperClassName.staticMethodName)呼叫隱藏的靜態方法。
小結:過載意味著使用同樣的名字但是不同的簽名來定義多個方法。重寫意味著在子類中提供一個對方法的新的實現。