原文

继承

​ 继承更为确切的说,继承树上下两个节点之间(即基类和导出类)的关系属于is-a的关系。
导出类(子类)使用 extends 从基类(父类)进行继承,导出类会继承父类中的public或是protected的方法或是属性。同时,导出类可以对这些方法或是属性进行重写。
初始化:对于基类和子类,使用构造器进行初始化,初始化过程是从基类开始扩展,及先基类在第一代子类然后第二代子类(初始化过程即构造函数链)。
当不存在基类构造器或者想要调用带参数的构造器,使用super 显式的编写调用基类构造器的语句。
可以使用super()显式调用父类的构造器,如果没有显式的调用,编译器会默认调用。当在构造器内显式调用父类的构造器的时候,super()必须是构造器的第一个命令。

​ 初始化的实际过程:

1
2
3
4
在其他任何事物发生之前,将分配给对象的存储空间初始化为二进制的零。
调用基类构造器。
按照声明的顺序调用成员的初始化方法。
调用导出类的构造器主体。

初始化过程

    继承,继承的是基类的接口。在继承的时候,使用某个现有类,并且开发一个它的特殊版本。换而言之,继承的作用是我需要将一个通用的类特例化,例如我需要汽车,汽车可以从交通工具特例化,这就是继承。
在继承中,当子类需要使用基类的方法时候,使用super调用基类的方法。
在Java继承时,程序代码会将导出类的引用转换为基类的引用,这种现象称为 向上转型。向上转型是从一个较专用类型向较通用类型转换,所以向上转型总是很安全的。或者说,导出类是基类的一个超集,导出类可以含有比基类更多的方法,但是它必须至少含有基类中所含有的方法。
纯继承:继承时只对基类的方法进行覆盖,而不对导出类进行任何扩展。

​ 多重继承(Java已经取消):将一个类继承自多个类。
存在缺点:当继承的这些基类有着一个共同名称的方法,但是方法执行是不同的,当导出类实现这个方法时候,就会造成混乱。所以Java引入接口来解决这个问题,因为一个类可以继承多个接口。
多重继承导致的问题

组合

​ 组合是将一个对象引用置于新对象。也就是在一个新的对象内使用一个对象。
组合技术通常是想在新类中使用现有类的功能而非它的接口。即,在现有类中嵌入一个对象,让其实现所具有的功能,在新类的用户只能看到为新类所定义的接口,而非嵌入对象的接口。换而言之,我想要在汽车这个类内使用轮子、发动机两个对象,而当我将发动机和轮子装到汽车这个类时,这便成为了汽车所具有的特殊结构,所以我需要将发动机和轮子具有的属性或是方法用汽车的方式重新定义。

代理

​ 代理,是介于继承和组合中间的一个方法。代理将一个对象置于要构造的类内部,但是同时将这个对象的所有方法暴露在新类里面。换句话讲,在新类内部使用原类抽象的对象,新建同名的方法,返回为对象的方法。也就是将当前对象的方法返回新类的方法。

查看更多

Java基础:Java基础