java內部類的繼承
⑴ 使用內部類讓java實現「多繼承」
使用內部類讓Java實現 多繼承
眾所周知 Java沒有像c++那樣支持多繼承 但是我們可以使用介面或內部類來模擬實現多繼承
我們使用內部類來實現一個繼承自消費者笑禪 又繼承自生產者的派生類
實際上Java之所以設計出內部類這個概念 一方面是為了更好的封裝性 另一方面就是藉助內部類模擬實現多繼承
首先我們定義一個消費者抽象基類
view plainprint?
/** * Consumer Class *@author androidyue *Last Modified 上午 */ public abstract class Consumer { protected float buyPrice protected abstract void buyGoods() }
跡升吵以下是生產者抽象基類
view plainprint?
/** * Procer Class *@author androidyue *Last Modified 上午 */ public abstract class Procer { protected float cost protected abstract void proce() }
使用內部類實現 多繼承 的派生子類
view plainprint?姿侍
/** *Java實現 多繼承
*@author androidyue *Last Modified 上午 */ public class InnerClassDemo extends Procer { private ConsumerBuyer buyer
public void desribeMySelf(){ System out println( 使用Java模擬多繼承 ) this proce() this buyer=new ConsumerBuyer() this buyer buyGoods()
}
@Override protected void proce() { st= f System out println( 我是生產者 我以每件 +st+ RMB的成本生產一件產品 然後以 元價格對外出售 ) }
class ConsumerBuyer extends Consumer{
@Override protected void buyGoods() { this buyPrice= f System out println( 我是消費者 我以 +this buyPrice+ RMB 買了一件售價 元的商品 不信吧 因為我也是生產者!^_^ )
}
}
}
在程序入口調用
view plainprint?
/** * the entrance of application *@author androidyue *Last Modified 上午 */ public class AppMain { public static void main(String[] args){ InnerClassDemo demo=new InnerClassDemo() demo desribeMySelf() }
lishixin/Article/program/Java/hx/201311/25912
⑵ JAVA內部類使用,什麼時候該使用內部類及使
java中的內部類和介面加在一起,可以的解決常被C++程序員抱怨java中存在的一個問題 沒有多繼承。
每個內部類都能獨立的繼承自一個(介面的)實現,所以無論外圍類是否已經繼承了某個(介面的)實現,對於內部類都沒有影響。
1.內部類繼承
因為內部類的構造器必須連接到指向其外圍類對象的引用,所以在繼承內部類的時候使用特殊語法。問題在於,指向外圍類對象的引用必須被初始化,而在導出類中不存在可連接的默認對象。所以必須要用特殊語法來明確說清楚他們之間的關聯。
[java]view plain
classWithInner{
classInner{}
}
.Inner{
InheritInner(WithInnerwi){
wi.super();
}
}
publicclassEgg{
privateYolky;
protectedclassYolk{
publicYolk(){
System.out.println("Egg.Yolk");
}
}
publicEgg(){
System.out.println("NewEgg");
y=newYolk();
}
}
publicclassBigEggextendsEgg{
publicclassYolk{
publicYolk(){
System.out.println("BigEgg.yolk()");
}
}
publicstaticvoidmain(String[]args){
newBigEgg();
}
}
2 內部類覆蓋
當繼承一個外圍類的時候,內部類不會發生什麼變化。當明確的繼承一個內部類時會發生變化。
[java]view plain
[java]view plain
輸出:
New Egg
Egg.Yolk
⑶ java中static類可以被繼承嗎
java中 被static修飾的 class 都是 內部類雹斗消。
static class 是可以被繼源知承的銷盯