★首先說說用詞約定,雖然各位可能不接受我的用詞,但為了避免書上般的很長的話,別無選擇:
類型<=>類型的概念比類廣泛
成員函數<=>包括方法、屬性器和索引器
【{ }】<=>函數體部分,指實現的代碼,即{........},例如abstract成員函數和接口成員是沒有{ }的
【先代】<=>基類型
【後代】<=>派生類型
【本代】<=>本類型
【簽名】<=>同一類型中成員的簽名是唯一的
【同簽名】<=>不同代的成員但簽名相同的
【先員】<=>同簽名的【先代中定義】成員
【後員】<=>同簽名的一個【後代中重定義】成員(而且這個後代要向上轉換成本代!)
【始員】<=>在一個override成員函數的最後的一個virtual先員或abstract先員
【末員】<=>在一個成員函數的最先一個new virtual後員之前的最後一個override後員
【虛擬血脈】<=>對於一個非靜態成員函數,其始員到末員之間的所有成員函數,我認為它實現了代碼的"反向繼承"
★以下是本人對虛擬的看法:
①virtual成員函數
其{ }【盡量改用】末員的{ }
是一個始員.開始第一段虛擬血脈
②override成員函數
(訪問性必須顯式地與始員相同)
(其最近一個先員必須是abstract或virtual或override的)
其{ }【重定義了】始員的{ }
但其{ }也是【盡量改用】末員的{ }
③abstract成員函數【本身沒有{ }】,【必須取用】末員的{ }
是一個始員,開始第一段虛擬血脈
(有abstract成員函數的類型是abstract類,它不能被實例化和密封)
④new成員的在本代訪問比先員【優先】(訪問性可與先員不同)
但本代可以通過全限定名來訪問先員
⑤new virtual成員函數是一個始員,終止舊的虛擬血脈,開始一段新的虛擬血脈,這樣就解決了Java中的版本問題
⑥不加繼承修飾符就與先員同簽名的成員,效果和new一樣,但系統發出警告
⑦虛擬血脈上不允許靜態
⑧接口成員隱式都是abstract的
⑨實現接口的abstract類可以將接口成員映射到abstract成員函數上
⑩在同一個成員聲明中:
static和override和virtual和abstract四種修飾符不能兩兩並存