<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                已經解釋過,采用OOP一個最大的優勢是代碼復用,一個概念 DRY(don't repeat yourself)是很好的總結。實現代碼重用的一個方式在理論上非常簡單:當兩個以上的類共享通用的代碼片段,組織它們到函數并移動這些函數到一個基礎的 super class。 繼承從另一個角度可以看作層次結構樹,在根部有一個通用的系統,以交通工具 為例,有更專門的系統,就像汽車或者船,在每個分支,層次都有一個無限數量的水平帶有一些特定的角度。層次結構中每個新的水平都可以添加新的函數和變量:Vehicle 類可以有方法 accelerate() ,會被所有它的后代繼承,子類 Car 會有一個變量 numberOfWheels 而在平輩的 Boat 類中不會出現。 畢竟,繼承一個類意味著創建更多特定的功能,豐富已有的類。 每個類都可能是繼承自不超過一個父類。這在OOP中是一個普遍的范式,稱為單一繼承;Haxe同樣提供替代方式進行繼承。 一個繼承的類繼承所有私有和共有的實例字段,而不是靜態的那些。從其他OO語言來的人,如C#,私有訪問修飾符是等價protected修飾符的。 在前面CMS的例子中,一個新的文章類被實現。它和BlogEntry類有很多共同點。都有一個 title,一個 content,一個except,當然還有一個發布方式。那么代碼要重復兩次嗎?當然不是。一個通用的基類是必要的。這就是繼承。 兩個新的類被創建:Article 和BlogEntry,它們繼承BaseEntry,并繼承所有它的字段,而不會重復。 ~~~ class BaseEntry { public var title(default,default) : String; public var content(default,default) : String; public var createdOn(default,null) : Date; public var onlineInfo(getOnlineInfo,null) : String; public var excerpt(getExcerpt, setExcerpt) : String; private var definedExcerpt : String; private var publishedOn : Date; public function new (title : String, content : String) { this.title = title; this.content = content; createdOn = Date.now(); publishedOn = null; } private function getExcerpt() : String { if(definedExcerpt != null) return definedExcerpt; else return content.substr(0, 10) + “ ...”; } private function setExcerpt(value : String) : String { definedExcerpt = value; return definedExcerpt; } private function getOnlineInfo() : String { if(publishedOn == null) return “Not yet on-line”; else { // getTime() returns the time in milliseconds since 1970-01-01 // we have to divide the time span by 24 hours=24*60*60*1000=86400000 var daysOnline = (Date.now().getTime()-publishedOn.getTime())/86400000; return if(daysOnline < 1) “Published Today”; else if(daysOnline < 2) “Published Yesterday”; else if(daysOnline < 7) “Published “ + Math.floor(daysOnline) + “ days ago”; else “Published on “ + DateTools.format(publishedOn, “%Y-%m-%d”); } } public function isOnline() : Bool { return publishedOn != null && publishedOn.getTime() < = Date.now().getTime(); } public function publish() : Void { publishedOn = Date.now(); } public function unpublish() : Void { publishedOn = null; } } class BlogEntry extends BaseEntry { } class Article extends BaseEntry { } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看