日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

关于继承

Home Forums 《冒号课堂》讨论区 关于继承

Tagged: ,

  • This topic is empty.
Viewing 2 reply threads
  • Author
    Posts
    • #1139
      folger
      Member

      有个小问题,请老师指教.

      在第九章讲继承时,您有这么一个观点,父类应该尽可能禁用protected域成员.我想知道什么情况下可以违背这一原则.因为现实中这种情况似乎非常普遍:父类中含有需要和子类共享而又不便为外界所知的数据,这时候难道不是将其设为protected更为合适吗?

    • #1365
      hui
      Keymaster

      现实中子类采用父类protected域成员的情形的确有不少,但这种设计一般是不提倡的。这是因为相比方法成员,域成员的可变性更大,包括名称、用法、访问控制等等,并且也不像前者那样可以被overriden。此外,其用法的粒度也大于前者的粒度。总之,后者的抽象性和规范性均不如前者。这也是为什么接口都以方法成员而非域成员的形式出现的原因。

      话说回来,一旦父类已经采用了protected域成员,也不是绝对不能在子类中引用的。但要注意两点:一、如果不通过域成员也能达到目的的,则尽量不用,除非涉及到严重的性能问题;二、如果不得不用,一定要弄清域成员的详细规范并严格遵循之。(如果父类有protected域成员却无相应的规范文档,这种父类不要也罢)

    • #1366
      Lumj
      Member

      “如果父类有protected域成员却无相应的规范文档,这种父类不要也罢”

      哈哈

      我觉得其实父类直接向子类暴露数据(protected),和一个类直接向外部暴露它的数据(public),定性地来看,是一样的,只是前者从名义上来说更容易套近乎——”hi,我也是写类供外面使用的”——从而对它的松懈觉得情有可原罢了,而实际上它对父类的颠覆能力一点也不差..

Viewing 2 reply threads
  • You must be logged in to reply to this topic.
 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)