1.被隐藏的具体实现
java用三个关键字在类的内部设定边界:public、private、protected。
public:表示紧随其后的元素对任何人都是可用的;
private:表示除类型创建者和类型内部方法外的任何人都不能访问的元素;
protected:与private作用相当,差别仅在于继承的类可以访问protected成员,但不能访问private成员;
java还有一种默认的访问权限,当没有使用前面提到的任何访问指定词时,它将发挥作用。这种权限通常被称为包访问权限,因为在这种权限下,类可以访问在同一个包(库构件)中的其他类的成员,但是在包之外,这些成员如同指定了private一样。【default】
2.复用具体实现
新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成因为是在使用现有的类合成新的类,所以这种概念被称为组合,若组合是动态发生的,那么它通常被称为聚合。组合是一个has-a(拥有)关系。类似于汽车拥有一个引擎。
开发中程序员会被高度强调继承的作用,但若处处使用继承,会导致难以使用并过分复杂的设计。实际上,在建立新类时,应首先考虑组合,因为它更加灵活,若采用组合,设计会变得更加清晰。
3.继承
通过继承而产生的类型等价性是理解面向对象程序设计方法内涵的重要门槛。
覆盖(overriding)——子类正在使用父类相同的接口,但是子类想在新类型中做一些不同的事情。
继承是is-a(是一个)的关系,但更多时候是is-like-a(像一个)的关系,因为子类可能会有父类没有的方法。
4.伴随多态的可互换对象
直接对父类对象发送消息,而无需担心对象将如何处理消息。
非面向对象的编译器产生的函数调用会引起所谓的前期绑定,即编译器将产生对一个个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址。但是在OPP中,知道运行的时候才能知道代码的地址,这就引入后期绑定的概念,即当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查,但并不知道将被执行的确切代码。
将导出类看做是他的基类的过程称为向上转型。一个面向对象的程序肯定会在某处包含向上转型,因为这正是将自己从必须知道确切类型中解放出来的关键。