组合、继承与接口
来源:互联网 发布:会员注册软件 编辑:程序博客网 时间:2024/05/16 10:05
一、组合:has-a(鸟有翅膀)需要显示创建被组合对象
继承:is-a(麻雀继承鸟类)隐式
1、组合可以让我们有选择的复用某些功能,而不像继承,不管怎么样复用所有非私有的功能,
当我们只需要其中的某一部分的时候,这个时候就应该考虑组合而不是继承,
2、private 类型绝对只能在本类中直接使用 至于一些间接使用的除外(用的比较少嘛)(错误说法:组合产生一个实例就可以应用其私有的东西
继承而不能使用其私有的东西)
3.继承不用说了,组合:
class Engine { public void start() {} public void rev() {} public void stop() {} } class Wheel { public void inflate(int psi) {} } class Window { public void rollup() {} public void rolldown() {} } class Door { public Window window = new Window(); public void open() {} public void close() {} } public class Car { <span style="color:#FF0000;">public Engine engine = new Engine(); </span>//一般情况下,你应使域(field)成为 private public Wheel[] wheel = new Wheel[4]; public Door left = new Door(), right = new Door(); // 2-door public Car() { for(int i = 0; i < 4; i++) wheel[i] = new Wheel(); } public static void main(String[] args) { Car car = new Car(); car.left.window.rollup(); car.wheel[0].inflate(72); } }
4.接口
定义接口格式:
[public]interface 接口名称 [extends父接口名列表]
{
//静态常量
[public] [static] [final] 数据类型变量名=常量值;
//抽象方法
[public] [abstract] [native] 返回值类型方法名(参数列表);
}
实现接口格式:
[修饰符] class 类名[extends 父类名] [implements 接口A,接口B,···]
{
类成员变量和成员方法;
为接口A中的所有方法编写方法体,实现接口A;
为接口B中的所有方法编写方法体,实现接口B;
}
例子:
定义接口
public interface AreaInterface{double pai=Math.PI;double area();}实现接口
圆:
package jiekou;public class Circle implements AreaInterface{double r;public Circle(double x){r=x;}//实现接口中的抽象方法,求圆面积public double area(){return pai * r * r;}public String toString(){return "圆:r="+r+"\tarea="+area();}}三角形:
package jiekou;public class Rectangle implements AreaInterface{double x,y;public Rectangle(double a,double b){x=a;y=b;}public double area()//实现接口中的抽象方法,求长方形面积{return x * y;}public String toString(){return "长方形:x="+x+";y="+y+"\t"area=+area();}}
Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。
二、网上看到的一张图:
首先是类:在UML中,我们用分成三栏的长方形表示。第一栏是名称,第二栏是属性,第三栏是方法。
继承:唐老鸭属于鸭的一种,或者说是鸭的细化划分,而鸭属于鸟类,鸟类属于动物,这里无论表达成“是”还是属于,就是这样一个直观的关系。用实线一端带空心三角箭头表示。箭头指向父类。
依赖:凡是动物,生存都需要水和空气,这种必须的需求,我们称之为依赖关系。用虚线一端带箭头表示,箭头指向依赖物。
聚合、组合:这两个关系我们放在一起,因为她们看似十分的相似,但是却有着本质的区别。
很多大雁聚合在一起变成雁群,也可以说雁群里有雁,所以是整体和个体之间的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期。即雁群可以不存在了,但是孤雁仍然存在。
一只鸟由两个翅膀组合而成,即一只鸟有两个翅膀。虽然组合和聚合我们都说“有”什么,但是这个“有”是不同的,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如这只鸟死了,自然这两个翅膀也就不存在了。
关联:企鹅和气候有关联,关联是最常见的关系,表示类与类之间的联接, 它使一个类知道另一个类的属性和方法。关联有两个端点, 在每个端点可以有一个基数, 表示这个关联的类可以有几个实例.
常见的基数及含义: 0..1:0 或1 个实例.
0..*: 对实例的数目没有限制.
1: 只能有一个实例.
1..*: 至少有一个实例.
接口:最后就是接口了,接口有两栏组成,第一栏的顶端加上《interface》后下方写接口名称,第二栏是接口方法。接口有自己的表示方法“实现”,虚线一端带空心三角形。实际开发中,为了更好的实现"开-闭原则",一般都是定义接口,依赖于接口,依赖于抽象。
还有一个概念是——多态,图中没有出现。多态顾名思义就是有很多种形式。
bush.roar()
orang.roar()
donald.roar()
同样是一个roar消息,却因为不同的对象可产生完全不同的结果。
- 组合、继承与接口
- 接口,组合,继承,组件
- 二十四、继承(一) 代码重用、继承方式、接口继承与实现继承、继承和重定义、继承和组合
- 接口的组合和继承
- 论组合与继承
- 组合与继承
- 继承与组合
- 组合与继承
- 组合与继承
- 继承与组合
- 组合 继承 与 代理
- 组合与继承
- 组合与继承
- 继承与组合
- 继承(Virtual)与组合
- 继承与组合
- acm-继承与组合
- oj继承与组合
- swift_016(Swift 的闭包)
- 基于第三方QQ授权登录
- 【我恨数论】之 逆元
- 一台电脑上如何配置多个版本JDK,并进行自由切换
- 分布式
- 组合、继承与接口
- STM32 PWM
- 《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构
- 限制UIAlertView上的TextField的输入字符长度
- 再说TCP神奇的40ms
- android字符串+数字变量方法之%1$s、%1$d的用法
- Mongoose学习参考文档——基础篇
- JS与OC的简单交互
- 欢迎使用CSDN-markdown编辑器