Java繼承的使用
這裡的問題是分別求出A和B的例項的個數。如下面的程式碼。
class Counter
{
private static int count = 0;
public static synchronized void Add() { count++; }
public static synchronized int getNumber() { return count; }
}
class A extends Counter
{
public A() { }
public void addA() { Add(); }
}
class B extends Counter
{
public B() { }
public void addB() { Add(); }
}
public class Test
{
public static void main(String[] args)
{
A[] aa = { new A(), new A() };
B[] bb = { new B(), new B(), new B() };
for(int i=0; i<aa.length; i++) { aa[i].addA(); }
for(int i=0; i<bb.length; i++) { bb[i].addB(); }
System.out.println(A.getNumber() + " A and " + B.getNumber() +" B");
}
}
輸出結果為:5 A and 5 B
對這個結果還是比較好理解的,因為Counter類中的count是static型別的。
但是這裡要說的是,這裡的繼承關係使用的合適嗎?類A和類B都不是“計數器(Counter)”,所以這裡使用繼承關係不合適。
在設計一個類的時候,如果該類構建於另一個類的行為之上,那麼你有兩種選擇:一種是繼承,即一個類擴充套件另一個類;另一種是組合,即在一個類中包含另一個類的一個例項。選擇的依據是,一個類的每一個例項都是另一個類的一個例項,還是都有另一個類的一個例項。在第一種情況應該使用繼承,而第二種情況應該使用組合。當你拿不準時,優選組合而不是繼承。
下面是重新設計的類。類A和類B中各自有一個計數器域,而且這些計數器域是靜態的。
class A
{
private static int count = 0;
public A() { }
public void addA() { count++; }
public static int getNumber() { return count; }
}
class B
{
private static int count = 0;
public B() { }
public void addB() { count++; }
public static int getNumber() { return count; }
}
public class Test
{
public static void main(String[] args)
{
A[] aa = { new A(), new A() };
B[] bb = { new B(), new B(), new B() };
for(int i=0; i<aa.length; i++) { aa[i].addA(); }
for(int i=0; i<bb.length; i++) { bb[i].addB(); }
System.out.println(A.getNumber() + " A and " + B.getNumber() +" B");
}
}
輸出結果為:2 A and 3 B
相關文章
- Java的繼承Java繼承
- java中的繼承Java繼承
- 12.16 Java繼承Java繼承
- java繼承extendsJava繼承
- Java集合繼承圖Java繼承
- java -繼承 -重寫Java繼承
- Java繼承練習Java繼承
- odoo 繼承(owl繼承、web繼承、view繼承)Odoo繼承WebView
- CSS的繼承和使用方式CSS繼承
- 類的繼承,介面的使用繼承
- javascript原型鏈繼承的使用JavaScript原型繼承
- Javascript繼承4:潔淨的繼承者—-原型式繼承JavaScript繼承原型
- java繼承與多型Java繼承多型
- 【Java】繼承、抽象、組合Java繼承抽象
- Java 繼承是什麼?Java繼承
- java物件導向繼承Java物件繼承
- 為什麼說Java中要慎重使用繼承Java繼承
- 菱形繼承,虛繼承繼承
- 原型,繼承——原型繼承原型繼承
- C++中公有繼承、保護繼承、私有繼承的區別C++繼承
- Java中介面與繼承的區別Java繼承
- Java中的類繼承與多型Java繼承多型
- JAVA中的註解可以繼承嗎?Java繼承
- 類的繼承_子類繼承父類繼承
- java——繼承遇到構造方法Java繼承構造方法
- java繼承基礎詳解Java繼承
- Java之繼承和抽象類Java繼承抽象
- 多繼承 與 多重繼承繼承
- Javascript繼承2:建立即繼承—-建構函式繼承JavaScript繼承函式
- Java類是如何預設繼承Object的?Java繼承Object
- Java建構函式的繼承問題Java函式繼承
- 學習Java中遇到的繼承問題Java繼承
- 類的繼承繼承
- Pyhon的繼承繼承
- Python的多重繼承如何使用?python教程Python繼承
- Java入門系列-16-繼承Java繼承
- Java核心技術筆記 繼承Java筆記繼承
- Java 自學 - 介面與繼承 介面Java繼承
- 繼承繼承