Java——代码复用(组合和继承)】的更多相关文章

作为一门面向对象开发的语言,代码复用是java引人注意的功能之一.java代码的复用有继承,组合以及代理三种具体的表现形式,下面一一道来. 第一种方式是通过按照现有的类的类型创建新类的方式实现代码的复用,这种方式称之为继承.当我们创建一个新类时,总是继承这样或者那样的父类,隐式的父类是Object类. public class A { int a; public A(int a) { this.a=a; System.out.println("------construct a------&qu…
前言 "复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它必须还能够做更多的事情." Java解决问题都围绕类展开的,对于复用代码,可以创建新的类来复用,也可以使用别人已经开发并调试好的类.方法的关键在于使用类而不破坏现有程序代码.有两种方式达成此方法的目的:组合和继承.下面将介绍这两种代码重用机制. 组合和继承的实现 在新的类中产生现有类的对象,即做组合.该方法只是复用了现有程序代码的功能,而不是它的形式.按照现有类的类型…
Java是一个面向对象的语言.每一个学习过Java的人都知道,封装.继承.多态是面向对象的三个特征.每个人在刚刚学习继承的时候都会或多或少的有这样一个印象:继承可以帮助我实现类的复用.所以,很多开发人员在需要复用一些代码的时候会很自然的使用类的继承的方式,因为书上就是这么写的(老师就是这么教的).但是,其实这样做是不对的.长期大量的使用继承会给代码带来很高的维护成本. 本文将介绍组合和继承的概念及区别,并从多方面分析在写代码时如何进行选择. 面向对象的复用技术 前面提到复用,这里就简单介绍一下面…
复用代码是Java众多引人注目的功能之一.这句话很通顺,没什么问题,但问题在于很多人并不清楚“复用”是什么.就好像我说“沉默王二是一个不止会写代码的程序员”,唉,沉默王二是谁? 我们需要来给“复用”下一个定义.复用,说白了就是重复使用. 举个例子,很多名人说了很多名言,我们在说话.写作的时候,就经常有意无意的重复这些名言.比如说我,就特别喜欢重复使用王小波的那句名言:“从话语中,你很少能学到人性,从沉默中却能.假如还想学得更多,那就要继续一声不吭 .” 上面这个例子,只能说是“复用”的一种低级的…
public interface Comparable<T> { public int compareTo(T o); } 1. 接口(Comparable:可比较接口) public static boolean less(Comparable v, Comparable w) { return v.compareTo(w) < 0; } 当然也可以将参数中的 Comparable 具化为 Comparable<Character>, public final class…
在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的. C++的继承 首先看看c++中是如何做的. 例如要做一个场景结点的Node类和一个Sprite类继承它. 定义一个node基类 struct Node { float x; float y; void move_to(float x, float y) { this->x = x; this->y = y; } virtual void draw() const { printf(&qu…
引子 博客断了一段时间,不是不写,一是没时间,二是觉得自己沉淀不够,经过一段时间的学习和实战,今天来总结下一个老生常谈的东西: 代码复用. 为何复用 JS门槛低,故很多人以为写几个特效就会JS,其实真正混前端的人都知道,JS写的好和写的不好差距是很大的,前段时间看到一个前端为了实现一个浮层的显示与隐藏花了100多行代码,去遍历各个子元素,挨个去设置display.还有一个很常见的场景,为了给一个UL下面的n个li绑定事件,遂遍历所有的li去bind,这些例子在日常的开发中,比比皆是,为什么有这种…
程序的开发离不开代码的复用,通过代码复用可以减少开发和维护成本,在谈及代码复用的时候,会首先想到继承性,但继承并不是解决代码复用的唯一方式,还有其他的复用模式比如对象组合.本节将会讲解多种继承模式以实现代码复用. 继承复用-默认模式 继承复用-apply函数 继承复用-临时构造 继承复用之默认模式: 每个javascript对象都和另一个对象 相关联,而这个对象就是原型(prototype),而原型又可以链接到其他原型行程原型链,如果当前对象不存在类似方法则会沿原型链查找,直到查找为止.继承的默…
面线对象: /* 成员变量和局部变量的区别? A:在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 B:在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 C:生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 D:初始化值不同 成员变量:有默认初始化值 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用.   注意事项: 局部变量名称可以和成员变量名称一样,在方法中使用的时候,…
建议103:区分组合和继承的应用场合 继承所带来的多态性虽然是面向对象的一个重要特性,但这种特性不能在所有的场合中滥用.继承应该被当做设计架构的有用补充,而不是全部. 组合不能用于多态,但组合使用的频率却要远远高于继承. 继承UML图如下: 对应的代码如下: abstract class Stream { //省略 } class FileStream:Stream { //省略 } class MemoryStream : Stream { //省略 } 组合UML图如下: 对应代码如下: c…