java继承与组合与代理
来源:互联网 发布:股指期货持仓数据 编辑:程序博客网 时间:2024/05/17 04:58
所有的程序语言,都要想办法解决代码复用性的问题,在java中,可以通过继承或者组合或者代理来复用代码。这里解释一下继承和组合的区别,以及他们分别适应于什么场景,以及使用时候应该注意什么。
子类通过继承,可以直接拥有父类的所有方法(接口)和属性(域);组合,通过将其他类作为自己的成员变量,也拥有了这个类的所有方法(接口)和属性(域)。他们都可以复用代码。如下代码所示:
继承
class Base{public void test(){System.out.println("test");} }public class Super extends Base{}
子类通过继承父类,拥有了父类的所有的方法。
组合
class Base{public void test(){System.out.println("test");} }public class Super{Base b;}Super通过将Base作为自己的成员变量,也拥有了Base中的所有方法。
其实呢,继承可以认为是子类拥有一个父类对象,但是这个对象在子类的内部;而组合是其中的一个对象是在外部的。继承中,父类通常是一个通用的类,而子类是父类的特殊化。我们可以简单的认为,继承是is-a的关系,比如,鸟是父类而麻雀是子类;组合是has-a的关系,比如,车和轮子的关系。
继承通常会将自己的方法,设置为public,方便子类的使用;组合通常将会对象引用设置为private,因为通常只是希望自己能够访问此成员的内部属性,并不希望对象用户可以访问。
另外需要注意的是,虽然继承是一个相当重要的概念,但是在实际的运用中,一定要注意,尽量不要轻易的去使用继承这个概念。
使用继承时,必须是自己清楚的认识到,确实需要对一个抽象,进行特殊化,并且确实要用到向上转型(多态中的概念),否则尽量不要使用。
我们还可以使用代理来作为中庸之道,作为继承和组合的中间。
看如下代码:
代理
class SpaceControll{void up(int num){}void down(int num){}void left(int num){}void right(int num){}}class Space{private SpaceControll s = new SpaceControll();void up(int num){s.up( num);}void down(int num){s.down( num);}void left(int num){s.left( num);}void right(int num){s.right( num);}}
显示,飞船控制,不应该由飞船类来继承,实际上,飞船控制,应该是飞船所拥有。在这种情况下可以使用代理,通过代理,表面上通过飞船调用,而在底层还是通过飞船控制类。我们使用代理还可以增强控制力。比如不一定把飞船控制的所有功能都暴露出来,而是选择自己需要的暴露。
阅读全文
1 1
- java继承与组合与代理
- 组合 继承 与 代理
- JAVA-组合与继承
- JAVA 组合与继承
- JAVA 继承与组合
- java继承与组合
- Java继承与组合
- java继承与组合
- java组合与继承
- java 继承与组合
- java 继承与组合
- JAVA 继承与代理
- Java中的继承与组合
- java中的继承与组合
- Java中的继承与组合
- Java中的继承与组合
- Java的继承与组合
- Java中的继承与组合
- 微信bug:建议了解,不要实验,不要手贱,不要。。。。
- 蒙特卡罗方法(Monte Carlo method)浅入
- Java学习笔记(25)--继承(extends)详解
- 2017 北京站网选 Minimum
- 微信15字符破解
- java继承与组合与代理
- virtualbox上centos7静态ip配置
- elasticsearch的原理
- 【费用流|单纯形】BZOJ1061 [Noi2008]志愿者招募
- Fmpeg Ios 库编译和使用(一)
- golang 算法之 pancake
- 新路程------hi3516a watchdog
- Java学习笔记(26)--理解java的三大特性之继承
- .。。开始更博客