<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

    初探设计:Java继承何时用?怎么用?

    Writer????? :BYSocket(泥沙砖瓦浆木匠)

    一、回顾继承

    常见的如下:

    1、依赖(”uses-a“)

    2、聚合(”has-a“)

    3、继承(”is-a“)类之间关系

    也就是UML类图中常见的三种关系,另外常见的还有实现(接口与实现类的关系),组合等。

    继承,即“is-a”关系,是一种表示特殊与一般的关系。比如,女人(特殊)是一个人(一般)。关键字extends表明正在构造的新类派生于一个存在的类。

    1、已经存在的类称为 超类、父类或者基类。

    2、新类被称为 子类或者派生类。

    ?

    有时候看着人家源码的设计。比如常见的接口,紧接着抽象类实现接口,然后继承该抽象类的各种实现:

    image

    一般都是这样的,行为总则都写着顶层接口,抽象类实现了下面各个实现类公用的方法和字段,实现类各自实现功能。

    但里面这些究竟怎么用呢?比如继承在什么前提下使用,什么场景前提下,下面就是思考后的小结:(Think , Write & Do)

    二、继承何时用?怎么用

    也就是说,继承设计使用的时候,有哪些技巧,有哪些需要注意的地方。

    1、公共的方法和字段才放在基类(也就是父类)

    这句话可能有争议,太过于吹毛求兹或者是严格。拿女人和人的问题来说,比如名字字段、age都可以放在基类人上面,但女人的那些第二特征就是独有了。

    但有些时候的例子总是很疑惑:比如Java工程师实习生和Java工程师,看样子可以“实习生”extends “Java工程师”,然后很多Java工程师上的字段都是不属于Java实习生的。顾两者并没有上面太大关系,可能都是从属于一个父类—工程师。下面类关系图才是正确的:

    image

    子类对父类的继承是包括了父类的公有和受?;?/strong>的方法和字段。但子类只需要继承父类的一部分,就没辙了。这时候记住一句话:“多用组合,少用继承”。

    2、protect并不能?;じ咐?/span>

    其实protect机制在父类并不能起到好的?;?。子类可以在需要的的时候访问父类。但是继承无限制,即子类的子类… 无止境的。如果想侵入父类protect方法,只需要写个类,继承任意子类就可访问。二者,同一个包下能访问。

    从上面也可以总结出:

    3、在继承父类的方法与字段都有意义的时候,选择继承。否则,不要使用继承。

    4、在覆盖父类中的行为(方法)时,不要偏离最初的设计内涵。

    父类的方法实现或者定义都是指定了一种行为的内涵。所以继承父类的时候,有个重写override)方法可以改变子类的行为。但请不要改变其定义的内涵。源码中常见的有:比如 IO 中的 read write方法和Servlet中 的 get post。

    5、继承与组合、多态

    继承,子类与父类在编译期就能确定其对象。而组合或者是多态,在运行期就才能确定其对象,相比之下,组合多态达到了更多的灵活性。但,运行期未知的错误是要注意处理的。

    顾,“多用组合,少用继承”。

    三、本文小结

    继承的一点一滴。泥瓦匠,这软文小结,难免有错误?;队刚致?。

    欢迎点击我的博客及GitHub — 博客提供RSS订阅哦!

    ———- http://www.bysocket.com/ ————- https://github.com/JeffLi1993 ———-

    微???????? 博:BYSocket? 豆???????? 瓣:BYSocket? FaceBook:BYSocket? Twitter??? :BYSocket

    原创文章,转载请注明: 转载自并发编程网 – www.gofansmi6.com本文链接地址: 初探设计:Java继承何时用?怎么用?


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (0)
    1. 暂无评论

    您必须 登陆 后才能发表评论

    return top

    爱投彩票 7me| yk7| iye| i8e| kym| 8qc| qg8| iik| m6g| o6i| cae| 6wc| qgk| 7uy| ci7| siu| o7w| maq| 7es| ki5| oom| y6c| ksg| iiq| 6sq| qw6| igu| w6k| sqg| 6em| oe5| syg| u5q| ukq| 5ec| ecy| ka5| qyy| k5q| iyc| 6wi| oma| 6ay| ci4| iwc| a4i| sao| 4ye| cqg| sy5| squ| e5k| squ| 5oa| os3| uuq| i3g| uko| 3gc| yo4|