利用继承实现软件复用

 1 class Animal
 2 {
 3     private String type;
 4     public Animal(String type){
 5         this.type = type;
 6     }
 7     public void beat(){
 8         System.out.println(this.getType()+"心脏在不停跳动。。。");
 9     }
10     public void breath(){
11         beat();
12         System.out.println(this.getType()+"呼吸中。。。");
13     }
14     public String getType(){
15         return this.type;
16     }
17 }
18 class Bird extends Animal
19 {
20     public Bird(String type){
21         super(type);
22     }
23     public void fly(){
24         System.out.println(this.getType()+"在天空自由自在的飞翔");
25     }
26 }
27 class Wolf extends Animal
28 {
29     public Wolf(String type){
30         super(type);
31     }
32     public void run(){
33         System.out.println(this.getType()+"在天空自由自在的飞翔");
34     }
35 }
36 public class AnimalTest
37 {
38     public static void main(String[] args)
39     {
40         Bird b = new Bird("鸟");
41         b.breath();
42         Wolf c = new Wolf("狼");
43         c.breath();
44     }
45 }

利用组合实现软件复用

 2 class Animal    //该类里的方法或Filed应是复用对象共同拥有的
 3 {
 4     private String type;
 5     public Animal(String type){
 6         this.type = type;
 7     }
 8     public void beat(){
 9         System.out.println(this.getType()+"心脏在不停跳动。。。");
10     }
11     public void breath(){
12         beat();
13         System.out.println(this.getType()+"呼吸中。。。");
14     }
15     public String getType(){
16         return this.type;
17     }
18 }
19 class Bird
20 {
21     private Animal a;
22     public Bird(Animal a){
23         this.a = a;        //this.a = a = a1 = Animal@1db9742
24 }
26     public void breath(){
27         a.breath();        //a1.bteath();
28     }
29     public void fly(){
30         System.out.println((this.a).getType()+"在天空自由自在的飞翔");
31     }
32 }
33 class  Wolf
34 {
35     private Animal a;
36     public Wolf(Animal a){
37         this.a = a;        //this.a = a = a2 = Animal@106d69c
38     }
39     public void breath(){
40         a.breath();
41     }
42     public void run(){
43         System.out.println((this.a).getType()+"在陆地上自由奔跑");
44     }
46 }
47 public class CompositeTest
48 {
49     public static void main(String[] args)
50     {
51         Animal a1 = new Animal("鸟");
52         Bird b = new Bird(a1);
53         b.breath();
54         b.fly();
55         Animal a2 = new Animal("狼");
56         Wolf c = new Wolf(a2);
57         c.breath();
58         c.run();
59     }
60 }

转载于:https://www.cnblogs.com/manliu/p/3986751.html

利用继承和组合实现软件复用相关推荐

  1. python 类继承和组合_python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...

  2. C++编程进阶6(public继承与组合、private继承、多重继承、处理模板基类内的名称、如何避免模板代码膨胀)

    二十一.public继承与组合 public继承是是子类对象is a基类对象的关系,比如QT中的所有组件类都要继承QObject,所以所有的QT组件都是一个QObject. 而组合是has a(包含) ...

  3. Scala入门到精通——第九节 继承与组合

    主要内容 类的继承 构造函数执行顺序 方法重写 匿名类 多态与动态绑定 组合与继承的使用 1 类的继承 下类的代码演示了Scala类的继承 //Person类 class Person(name:St ...

  4. 【设计模式之美】<Reading Notes>继承与组合

    继承缺点 继承是面向对象的四大特性之一,用来表示类之间的 is-a 关系,可以解决代码复用的问题.虽然继承有诸多作用,但继承层次过深.过复杂,也会影响到代码的可维护性.在这种情况下,我们应该尽量少用, ...

  5. C++ 继承与组合的区别

    C++ 程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及两个概念,一个是继承(Inheritance),一个是组合(Composition).因为二者有一定的相似性,往往令程序 ...

  6. 【Java SE】继承;组合;向上转型;动态绑定;方法重写;静态绑定;多态;抽象类;接口;

    面向对象编程 文章目录 1. 包 1.1 导入包中的类 1.2 静态导入 1.3 将类放到包中 1.4 包的访问权限控制 1.5 常见的系统包 2. 继承 2.1 语法规则 2.2 protected ...

  7. java 继承 模型_java – 画布形状模型的继承与组合?

    对于以下模型,您更喜欢继承还是组合: >我想在画布上绘制对象,每个对象代表一个数据对象 >将其视为状态机图:椭圆表示状态,线表示它们之间的连接/转换.对象表示本身永远不会改变,即状态将始终 ...

  8. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  9. 详细分析如何在java代码中使用继承和组合

    文章目录 继承与组合 何时在Java中使用继承 何时在Java中使用组合 继承与组成:两个例子 用Java继承重写方法 Java不具有多重继承 使用super访问父类方法 构造函数与继承一起使用 类型 ...

最新文章

  1. [转] Android系统版本号和Android API level对应表
  2. linux系统编码修改
  3. HALCON示例程序measure_ring.hdev齿轮齿宽度测量
  4. java 类 null_深入理解java中的null“类型”
  5. webstorm 10.0.4 注册码
  6. jdbc 链接不了mysql_JDBC链接Mysql失败
  7. Oracle 10g升级之--PSU 升级(续)
  8. 一些常用SQL语句大全
  9. 操作系统概念(Operating System Concepts Ninth Edition恐龙书)阅读
  10. ReportMachine如何导出PDF文档?
  11. linux串行提交脚本,如何保证shell脚本串行执行
  12. 进出队C语言不用链表,C语言面试题总汇简要
  13. api日常总结:前端常用js函数和CSS常用技巧
  14. 推动线下网吧转型 京东Game+ CEST总决赛圆满落幕
  15. CMS简数采集数据发布到迅睿CMS教程
  16. 运维累了:该故障自愈出场了
  17. 重置并,修改MySql密码
  18. 计算机图形学05:中点BH算法对任意斜率的直线扫描转换方法
  19. 生成HTTP响应报文
  20. 计算机网什么是cih病毒,全球十大计算机病毒排名(7-9)

热门文章

  1. 相机中影响成像质量的参数
  2. leetcode —— 面试题 16.19. 水域大小
  3. OpenCV--读取图像中任意点的像素值,并显示坐标
  4. FFMPEG针对视频操作的基本命令
  5. 相机标定(Camera calibration)
  6. 计算机桌面文件夹排序,电脑桌面文件整理前后对照
  7. python中event_Python Event实现线程通信
  8. 实车采集的数据重建场景_避障、探测、采样......华理这套系统让无人小车“身手非凡”...
  9. dhcp软件_tp-link无线路由器软件如何升级【教程图解】
  10. latex中report目录_在 LaTeX 中将不编号的章节列入目录