组合是什么

1.继承和组合都是一种随思想渗透而下的编码方式,其根本目的都是为了复用类,减少重复代码

2.要实现一个类的复用,可以分为组合语法和继承语法

3.组合就是通过将一个对象置于一个新类中,将其作为新类的成员变量,组成 类的一部分。

4.继承和组合使用情况要随机应变

继承与组合区别

1.组合是在新类产生现有类的对象,组合出功能给更强的新类。

2.继承通过现有类的类型创建新类,并且功能在现有类的基础上进行功能上的扩展,实现更强的类。

继承语法

//1.用继承实现代码复用
package me.jicheng; class Animal{ //心脏跳动,仅供其他调用
private void beat(){ System.out.println("心脏跳动");
}
//呼吸
public void breath(){ beat();
System.out.println("吸气呼气~~深呼吸~");
} }
class Bird extends Animal{ //多了一个奔跑
public void fly(){ System.out.println("在你的天上自由的飞翔~~");
}
} class Wolf extends Animal{ public void run(){ System.out.println("12.88冲刺啊~");
} }
public class Inherit{ public static void main(String[] args){ //Bird 对象
Bird niao=new Bird();
niao.fly();
niao.breath(); //Wolf狼
Wolf lang=new Wolf();
lang.run();
lang.breath(); } }

继承语法

//2.用组合实现代码复用
package me.zuhe; class Animal{ private void beat(){ System.out.println("心脏跳动");
}
public void breath(){ beat();
System.out.println("自由的呼吸");
} }
class Wolf extends Animal{ //把需要的类当作实例变量加入进来实现组合
private Animal one; //构造器
public Wolf(Animal one){ this.one=one;
} public void breath(){ one.breath();
} public void run(){
System.out.println("runing...");
} }
class Bird{ private Animal one; public Bird(Animal one){
this.one=one;
}
public void breath(){
one.breath();
}
public void fly(){
System.out.println("Fly...");
} } public class Composite{ public static void main(String[] args){ //创建Animal对象
Animal my=new Animal();
//创建Wolf对象并调用方法
Wolf nima=new Wolf(my);
nima.run();
nima.breath();
//创建Bird对象并调用方法
Bird nimei=new Bird(my);
nimei.fly();
nimei.breath();
} }

作者:YangGan


出处:

http://blog.csdn.net/incyanggan


本文基于
署名 2.5 中国大陆
许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan
(包含链接).

Java菜鸟学习笔记(23)--继承篇(二):继承与组合的更多相关文章

  1. Java菜鸟学习笔记--数组篇(三):二维数组

    定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...

  2. [原创]java WEB学习笔记23:MVC案例完整实践(part 4)---模糊查询的设计与实现

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. Java菜鸟学习笔记--数组篇(二):数组实例&args实例

    基本类型实例 //1.定义一个一维数组,先声明,在分配空间 int []number;//生命,没有初始化,number=null number=new int[5];//初始化为默认值,int默认值 ...

  4. Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态

    Polymorphism[多态] 简述: 面向对象多态性指的是:发送消息给某个对象,让该对象自行决定响应何种行为. 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用 多态的三个前提条件: 多 ...

  5. Java菜鸟学习笔记--面向对象篇(十六):Object类方法

    Object类 什么是Object类? Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法Object类是类层次结构的根,Object类 ...

  6. Java菜鸟学习笔记--Exception篇(一):异常简介

    什么是异常(Exception)? 简述: 在运行过程中,应用程序可能遭遇各种严重程度不同的问题.异常提供了一种在不弄乱程序的情况下检查错误的巧妙方式.它也提供了一种直接报告错误的机制. 不同类型异常 ...

  7. Java菜鸟学习笔记--面向对象篇(十五):Wrapper Class包装类

    什么是包装类? 在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很 ...

  8. Java菜鸟学习笔记()--面向对象篇(七):Wrapper Class包装类

    什么是包装类? 在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很 ...

  9. android菜鸟学习笔记13----Android控件(二) 自定义控件简单示例

    有时候,可能觉得系统提供的控件太丑,就会需要自定义控件来实现自己想要的效果. 以下主要参考<第一行代码> 1.自定义一个标题栏: 系统自带的标题栏很丑,且没什么大的作用,所以我们之前会在o ...

随机推荐

  1. Linux运维就业技术指导(八):期中架构考核

    一,期中架构考核概述 1.1 架构图 1.2 架构图公司背景概述 公司是一个新兴的人脸识别高新创业公司,公司名称xxxx 老总是博士生导师,还有一个副总是研究生导师 副总同时是研发总监,负责所有的研发 ...

  2. 查看webdriver针对浏览器的一些函数

    在用webdriver对浏览器进行操作时,很多操作并不是那么好找,后来在朋友的推荐下可以用下面的方法来寻找针对浏览器的一些操作,函数或属性等,这样方便我们可以查找一些方法去完成我们要的操作. 下面是查 ...

  3. phpStudy6——php导出可以设置样式的excel表格

    前言: 一般的后台管理页面肯定少不了excel表格导出的功劳,尤其是那些电商平台的订单导入导出,用户列表的导入导出等,那么本文就介绍php是如何导出excel表格的. php导出excel方法有很多, ...

  4. 苹果 重置APPID密保问题及更新开发者协议

    [链接]重置AppleID密保问题 https://www.jianshu.com/p/37e7f2852eda [链接]苹果开发者计划许可协议更新:持续更新 https://www.jianshu. ...

  5. [leetcode]785. Is Graph Bipartite? [bai'pɑrtait] 判断二分图

    Given an undirected graph, return true if and only if it is bipartite. Example 1: Input: [[1,3], [0, ...

  6. 零基础学习hadoop到上手工作线路指导(编程篇)

    问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如 ...

  7. ROS学习笔记二(创建ROS软件包)

    catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 必须包含一个catkin编译文件package.xml(manifests文件),此文件包含了描述该软件包的重要信 ...

  8. Codeforces 608B. Hamming Distance Sum 模拟

    B. Hamming Distance Sum time limit per test: 2 seconds memory limit per test:256 megabytes input: st ...

  9. 关于神奇的浮点型double变量

    1.因为double类型都是1.xxxxxxxxx(若干个0和1,二进制)乘以2的若干次幂来表示一个数,所以,和十进制的小数势必不能够一一对应,因为位数有限,总要有一个精度(两个数之间的实数是任意多的 ...

  10. 如何处理好前后端分离的 API 问题(转载自知乎)

    9 个月前 API 都搞不好,还怎么当程序员?如果 API 设计只是后台的活,为什么还需要前端工程师. 作为一个程序员,我讨厌那些没有文档的库.我们就好像在操纵一个黑盒一样,预期不了它的正常行为是什么 ...