继承与组合

                                            继承与组合

目录

                                            继承与组合

 

一:概述

1.继承

具体用法:

2.组合

二:继承的特性

三:组合和继承的异同点

四:继承与组合的选用


一:概述

1.继承

我们都知道Java是一种面向对象(Object)的编程语言,而面型对象的特征就包括抽象、继承、多态、封装。而这次所说的继承就是其中之一。继承是面向对象中的一个非常重要的特性。

通过继承,子类可以使用父类中的一些变量和方法,从而提高代码的复用性,减少代码量,提高开发效率。在Java语言中,被继承的类叫做基类或者父类,继承父类的类叫做派生类或者子类。继承的实现是通过关键字extends来实现的。

具体用法:

           class   子类名     extends    父类名;

2.组合

组合是指在新的类里面创建原有累的对象,重复利用已有类的功能,起作用与继承一样都是提高代码的复用性。

二:继承的特性

1)Java语言不支持类的多重继承,也就是说,一个子类做多只能有一个父类 。如果要想实现多重继承,只能通过接口的多重继承来实现。

2)子类只能继承父类的非私有(public、protected)的成员变量和方法。

3)当子类中定义的成员变量与父类中的成员变量重名时,子类中的成员变量会覆盖父类中的成员变量,而不是继承父类中的成员变量。

4)当子类中的方法签名与父类中的方法签名相同(重名)时(前提是个数相同、方法类型相同),子类会覆盖父类中的方法,也不会继承。

三:组合和继承的异同点

1.两者都是实现了代码的复用性,提高了开发效率,减少了代码量。

2.两者都允许在新的类中设置子类对象,只是组合是显式的,而继承是隐式的。

3.两者存在对应关系,组合中的整体类对应继承中的子类。组合中的局部类对应继承类的父类。

上面这个图就可以很清晰的简述两者的关系。Transport表示交通工具对象,Car表示车一类的对象,Tire表示轮胎对象。由此就可以看出来,Car是Transport的一种,因此是一种继承关系(即is-a的关系);而Car包含了多个Tire对象,因此是一种组合关系(即has-a的关系)。如下:

                         继承

                           组合

class Transport{

}

class Car extends Transport{ 

}

class Tire{

}

class Car extends Transport{

       protect Tire i = new Tire();

       }

}

四:继承与组合的选用

在上面就已经提到了,两者都可以提高代码的复用性。但是两者如何选择使用呢?如下:

1.如果两个类的关系不是“is-a”的关系,最好就不要用继承;不要为了减少代码或者提高代码的复用性而使用继承,而导致后期代码结构被破坏,造成代码的 可维护性差。一旦父类被修改,就会影响到其继承的子类,从而增加维护难度和成本(需求老是改的话,牵一发而动全身)。

2.不要因为实现多态而使用继承,如果class之间没有extends的关系,就可以通过接口与组合的方式来达到相同的目的。设计模式中的策略模式就是对这一点很好的体现,采用接口与组合的方式比采用继承的方式有更好的可拓展性。

一切都是为了提高代码的复用性(代码重构的原因),避免代码的臃肿,造成后期可维护性变差造成的成本增加。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值