① 多繼承有什麼壞處,為什麼java搞單繼承,介面為什麼可以擯棄這些壞處
多繼承雖然能使子類同時擁有多個父類的特徵,但是其缺點也是很顯著的,主要有兩方面:
(1)如果在一個子類繼承的多個父類中擁有相同名字的實例變數,子類在引用該變數時將產生歧義,無法判斷應該使用哪個父類的變數。例如:
類ClassA:
public class ClassA {
protected int varSame = 0;
}
類ClassB:
public class ClassB {
protected int varSame = 1;
}
子類ClassC:(假設允許類與類之間多繼承)
public class ClassC extends ClassA, ClassB {
public void printOut() {
System.out.println(super.varSame);
}
public static void main(String[] args) {
ClassC classC = new ClassC();
classC.printOut();
}
}
上面程序的運行結果會是什麼呢?輸出0還是1?
(2)如果在一個子類繼承的多個父類中擁有相同方法,子類中有沒有覆蓋該方法,那麼調用該方法時將產生歧義,無法判斷應該調用哪個父類的方法。例如:
類ClassA:
public class ClassA {
public void printOut() {
System.out.println(0);
}
}
類ClassB:
public class ClassB {
public void printOut() {
System.out.println(1);
}
}
子類ClassC:(假設允許類與類之間多繼承)
public class ClassC extends ClassA, ClassB {
public static void main(String[] args) {
ClassA classA = new ClassC();
classA.printOut(); // ------------------------- A行
ClassB classB = new ClassC();
classB.printOut(); // ------------------------- B行
ClassC classC = new ClassC();
classC.printOut(); //------------------------- C行
}
}
上面程序的運行結果會是什麼呢?A、B、C三行的輸出是0還是1?
正因為有以上的致命缺點,所以java中禁止一個類繼承多個父類;
在介面中不能有實例變數,只能有靜態的常量,不能有具體的方法(包含方法體),只能有抽象方法,因此也就摒棄了多繼承的缺點。
對於一個類實現多個介面的情況,因為介面只有抽象方法,具體方法只能由實現介面的類實現,在調用的時候始終只會調用實現類的方法(不存在歧義),因此不存在 多繼承的第二個缺點;而又因為介面只有靜態的常量,但是由於靜態變數是在編譯期決定調用關系的,即使存在一定的沖突也會在編譯時提示出錯;而引用靜態變數一般直接使用類名或介面名,從而避免產生歧義,因此也不存在多繼承的第一個缺點。
對於一個介面繼承多個父介面的情況也一樣不存在這些缺點。
② Java中多態的優缺點是什麼
多態的好處:擴展性強,父類的變數可以賦值不同的子類對象,而調用不同的子類重寫的方法
多態的弊端:不能使用子類特有的功能
這就是Java多態的優缺點了,想學習Java,自學看黑馬程序員,有視頻,有學習路線,讓你學習不迷茫!
③ java項目中方法都用靜態方法有什麼弊端
以上是Java編程性能優化中的一點,合理的適時的使用靜態方法會提高Java性能。關於Java編程性能優化詳細內容,參考:
④ java中什麼時候該用static修飾方法有什麼好處或者壞處
當一個方法或者變數需要初始化載入,或者是經常被調用的時候可以加上static。
用static修飾專的方法可以用類名屬直接調用,不用的一定要先實例化一個對象然後才可以調用
比如 person這個類裡面有一個方法public static add(){}
那麼可以直接用person類調用 person.add();當然也可以用下面的方法先出一個對象在調用也是可以
如果這個方法前面沒有static 比如 public add(){}
那麼先要person p=new person();
然後用p.add();
類載入器在載入這個類的時候就已經實例化了這個類。
壞處:初始化載入,比較占內存,所以不經常用的方法,不建議加此關鍵字。
⑤ Java靜態代理和iOS代理模式這兩個概念的理解上的疑惑
看了JAVA版的設計模式的 代理模式 和IOS @protrol 比較,java 的看了都暈了。不完全一致,委託和代理 稱呼上就好像反的。用JAVA 的中介面 在view中實現方法,就要把介面中所有的方法都復寫一下,這個不太好用, 還不知道其它什麼模式來實現像Ios @protrol 的功能。
⑥ java中什麼時候應該用static修飾方法有什麼好處或者壞處
當一個方法或者變數需要初始化載入,或者是經常被調用的時候可以加上static。x0dx0a用static修飾的方法可以用類名直接調用,不用的一定要先實例化一個對象然後才可以調用x0dx0a比如 person這個類裡面有一個方法public static add(){}x0dx0a那麼可以直接用person類調用 person.add();當然也可以用下面的方法先出一個對象在調用也是可以x0dx0a如果這個方法前面沒有static 比如 public add(){}x0dx0a那麼先要person p=new person();x0dx0a然後用p.add();x0dx0a類載入器在載入這個類的時候就已經實例化了這個類。x0dx0a壞處:初始化載入,比較占內存,所以不經常用的方法,不建議加此關鍵字。