java 复用类
在Java中进行代码复用的方式有两种
- 组合:在一个类中创建另一个类的实例从而达到代码复用的效果
- 继承:在定义一个类的时候使用extends 关键字来继承另一类从而达到代码复用的效果
继承的概念在此不再叙述,说一下继承的特性:
继承的特性
- 子类拥有父类非private的属性,方法和构造器。 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。
说到继承,就不得不说向上转型:
在thinking in java 中说到:“为新的类提供方法”并不是继承技术中最重要的方面, 其最重要的方面是用来表示新类与基类间的关系。这种关系可以用“新类是实现现有类的一种类型”这句话概括。
class Instrument{
public void play(){}
static void tune(Instrument instrument){
instrument.play();
}
}
public class Wind extends Instrument{
public static void main(String[] args){
Wind flute = new Wind();
Instrument.tune(flute); //向上转型
}
}
在tune()方法可以接受Instrument实例, 但是在Wind.main()方法调用tune方法是却传递的是Wind的一个实例。由于java是一中对类型严格控制的语言, 接受某种类型的方法同样可以接受另一种类型确实很奇怪, 除非在该例中Wind实例在方法调用的过程中可以自动转换为Instrument实例,而且也不存在任何tune()方法是可以通过Instrument来调用,同时又不存在于Wind中,在tune中, 程序代码可以对Instrument和它所有导出类起作用, 这种将Wind实例转换为Instrument实例的过程叫做向上转型。
向上转型是由一个比较抽象的类型向普通类型转换, 例如我们说鸟是一种动物, 这种说法就是一个向上转型的例子, 但是如果说动物是鸟就是错误的。
其实继承的作用主要在于为两个类之间提供一个关系,就如上述中Wind实例可以向上转型为Instrument实例。
在java代码复用中是选择组合还是继承:
在实际情况中考虑是否需要从新类向基类进行向上转型, 如果是必须, 那么使用继承是必须, 如果不是必须的, 那么就要考虑好好考虑实际情况了。