如果乙個類是另乙個類的擴充套件或延伸,那麼可以考慮是否可以用繼承,另外還需要權衡使用繼承後這個物件是否受制於父類,是否降低了靈活性。繼承只是繼承父類的特性而不能了解父類所有的東西,比如私有的函式、屬性等。而抽象是父子間相同的問題不能達成共識的時候就需要使用了,畢竟每個人有每個人的思考方式,不能把個人的意志強加於他人身上。所以,抽象是繼承的乙個公升級,廣開言路、求同存異耳。
public class father
public void setname(string name)
public int getage()
public void setage(int age)
@suppresswarnings("unused")
private void playcard()
}public class son extends father
}
兒子和父親雖然都有名字和年齡,但兒子並不知道父親會打牌、父親也不知道兒子能工作。如果輕率地改變父親的私有方法那麼兒子就會學會打牌了,兒子如果以打牌為樂、是不是會忘了工作呢?所以,繼承也並非什麼都好,子類會被父類影響那麼最好慎用繼承。顯然,兒子可以拒絕在工作的時候玩牌,但是就需要增加工作時不能玩牌的邏輯處理了。所以,修改後的**是這樣:
public class son extends father
@suppresswarnings("deprecation")
private boolean canplaycard()
return true;
} @override
public void playcard()
else
}}
這時候就可以考慮使用抽象類來實現了,不在需要使用繼承受父類的影響了。
public abstract class abstractclass
public void setname(string name)
public int getage()
public void setage(int age)
public abstract void playcard();
}
現在father、son繼承這個抽象類實現自己的玩牌規則就行了:
public class father extends abstractclass
}public class son extends abstractclass
public void playcard()
}
以前兒子見不慣父親只會打牌,兒子以此為恥給自己定下了打牌的規矩,從這裡看出father和son已經斷絕父子關係了,故事講訴完畢。 8,繼承與關係
概要 對於一張表,可能存在多重型別。我們可以用繼承來定義它們。實體關係的應用,解決資料表和表之間一些複雜問題。內容 論壇主題表 dbo.topics 欄位名 字段型別 可空 備註 topicid intnot null identity 主鍵 topictitle varchar 50 not nu...
繼承與組合關係
其中乙個編輯原則是 少用繼承多用組合 這句經典的話其實很容易明白,因為在編寫 路上很快就遇到這問題,也很快就明白為什麼,但我為什麼又要記入和?因為我有另乙個層次的體會 在繼承中我們無法呼叫繼承物件,而組合物件誰都可以呼叫。就這句是我體會到的 舉個例子 孩子繼承父親,孩子擁有父親的物件,在呼叫時chi...
c 友元關係與繼承
友元關係不能繼承。基類的友元對派生類的成員沒有特殊訪問許可權。如果基類被授予友元關係,則只有基類具有特殊訪問許可權,該基類的派生類不能訪問授予友元關係的類。class base frnd has no access to members in d1 class d1 public base clas...