我有一個抽象的Java類,它有一個應由具體子類初始化的散列碼字段。我想使初始化方法抽象的,即,在子類中設置超類字段
abstract class A {
protected int hashcode;
// hashcode should be initialized in constructor
protected A() { hashcode = setHashcode(); }
abstract int setHashcode() {} // implemented by subclasses
}
但不幸的是不同的子類需要採取不同數量的參數爲setHashcode
,例如,B類可能會使用它的兩個字段和C類強權計算哈希碼需要三個,但由於超級的調用必須是B的構造函數中的第一行,所以此方案不起作用。所以我想知道是否有不同的方式/設計模式來解決這個問題?
作爲風格注:這是尷尬的有一個名爲'setSomething()'方法不設置任何值,而是返回計算值。 'calculateHashcode'或'determineHashcode'可能會更好地表達方法的意圖。 – 2012-04-10 03:35:35
您可能會在[此問題]中找到相關信息(http://stackoverflow.com/questions/7223435/java-call-base-method-from-base-constructor),以及[this question](http:// stackoverflow .com/questions/7477553/in-java-is-there-a-legal-reason-to-call-a-non-final-method-from-a-class-co)有用。 – 2012-04-10 03:37:48