需求:獲取一段程式的執行時間
原理:獲取程式開始和結束的時間並相減即可
第一想法:將待測時間**塊放在開始時間和結束時間之間
public class gettime
long end=system.currenttimemillis();
system.out.println();
system.out.println("毫秒:"+(end-start)); }}
public class gettimedemo
}
這種思考方式把待測時間**塊放在開始時間和結束時間之間,如果要計算**執行時間,就得對**改動,而且在**裡面改更難。這時,可以通過繼承,進行方法複寫,具體實現如下:
public class gettime
long end=system.currenttimemillis();
system.out.println();
system.out.println("毫秒:"+(end-start));
}
}
public class subgettime
extends gettime
long end=system.currenttimemillis();
system.out.println();
system.out.println("毫秒:"+(end-start));
}
}這樣雖然能夠完成,但是**重複率太高,只是**塊發生了變化,其他都沒變。既然是**塊變化,我們可以把**塊單獨放置,然後讓gettime()方法呼叫**塊方法。還需通過繼承,具體如下:
public class gettime}public void runcode()
}
public class subgettime
extends gettime
}
}public class gettimedemo}
其實父類中的runcode()方法內的方法體,寫著也多餘,因為**的不確定性
public class gettime
public void runcode()
} public class subgettime extends gettime
} }public class gettimedemo
}
這個時候,runcode()方法,在gettime類中顯得多餘了。這時想到抽象方法,抽象類。
public abstract class gettime
public abstract void runcode();
} public class subgettime extends gettime
} }public class gettimedemo
}
這樣,就優化了**。重=從上面的**可以看出,gettime()方法,就是獲取**執行時間的**,不應該再改變(不能設為私有,私有只在類內可以使用,類外繼承不可見),所以將這個方法改為final,不允許繼承修改此**
public abstract class gettime
public abstract void runcode();
} public class subgettime extends gettime
} }public class gettimedemo
}
當**優化後,就可以解決這類問題。
這種方式,模板方法設計模式。
什麼事模板式方法呢?
在定義功能時,功能的一部分是確定的,但是有一部分是不確定的,而確定的部分在使用不確定的部分。
那麼這時就將不確定的部分暴露出來,由該類的子類去完成。但不一定用抽象,有些含預設的實現。
大話繼承 2 抽象方法和重寫
此文僅供娛樂,沒有任何攻擊任何人的意思,順便對映一下繼承,私有,抽象方法和重寫.把自己理解和一些心得分享給大家,絕無惡意.大家會發現這兩個name不一樣,乙個是我的名字,乙個是別的對手的名字,那麼應該如何正確的寫呢?加上this就可以了,屬於我這個類的成員變數,如果是super就是我師傅馬保國的名字...
C 抽象方法和虛擬方法理解
首先在c 中虛方法的定義 public virtual void virtualmethod 只要在方法名前加上virtual,就宣告了該方法為虛方法,注意宣告為虛方法後再不能加上abstract,static關鍵字宣告 以下是插入乙個例項來說明虛方法與非虛方法的不同 public class a ...
工廠方法模式和抽象工廠模式
工廠模式是 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,使乙個類的例項化延遲到子類。它有個特點,就是通常工廠的類層次與產品的類層次幾乎是一樣的樹。如果說工廠是你的影子,你就是產品了。在你平時未用到模式的時候,你需要什麼就new乙個,這種情況就好比你躺在地上,人影合一了。那什麼時候需要工廠模...