再读java思想----一切皆对象

1、在良好的面向对象设计中,每个对象都能很好的完成一项任务,但是它并不试图做更多的事情。

 

2、将程序开发人员分为类创建者和客户端程序员。

 

     客户端程序员(client programmer)目标是收集各种用来实现快速应用开发的类。

 

     类创建者目标是构建类。该类只向客户端程序员暴漏必须的部分,而影藏其他所有部分。被影藏的部分通常都是代表对象内

 

部脆弱的部分,这样可以减少程序的bug。

 

3、java使用三个关键字在类的内部设定边界:public,protected,private。

 

    public:表示紧随其后的元素对任何人都可见。

 

    private:表示紧随其后的元素除类型创建者和该类型的内部方法之外的任何人都不能访问。

 

    protected:与private作用相当,差别仅在于继承类可以访问protected成员,但不能访问private成员。

 

4、类的复用

 

     最简单的复用就是直接使用该类的一个对象,此外也可以将该类的一个对象作为新类的成员。这种概念成为组合。组合

经常被视为“has-a”(拥有)关系。

 

5、类的继承

 

     通过类的继承,我们可以达到复制原有类的目的,并且还可以在新类上添加自己的属性和功能。但是,当原有类(超类,父类)发生了变更,那么这些变更将也会反映在导出类上。

 

     当我们继承某类的时候,也创造了新类。这个新类不仅包括了现有类型的所有成员(尽管private成员被影藏起来,并且不可访问),而且更重要的是它复制了基类的接口。也就是说,所有可以发送给基类对象的消息同时也可以发送给导出类。

 

     由于基类和导出类具有相同的基础接口,所以伴随此接口的必定有具体实现。如果导出类不具体去实现接口,那么直接就会继承基类的接口实现,这样导出类与基类就没有区分,导出类也就没有任何价值了。

 

     有两种方法可以使导出类和基类产生差异。其一:直接在导出类中加入新的方法。其二:重载。也就是说,使用相同的接口方法,但是却做不同的事情。

 

6、多态

 

     在处理类型的层次结构时,经常将一个对象当做其基类对象来对待,这样的代码是不会受添加新类型而影响的,而且添加新的类型是扩展一个面向对象程序最常用的方式。

 

     通过导出新的子类而轻松扩展设计的能力是封装改动的基本方式之一。

 

     我们将导出类看作是它的基类的过程,称之为“向上转型”。一个面向对象程序肯定会在某处包含向上转型,因为这正是你如何将自己从必须知道确切类型中解放出来的关键。

 

     这样做非常方便,用例子来说就是,如果你是shape类型,那么你就自己来出来自己的erase()和draw()吧。

 

     面向对象程序设计最重要的妙计:编译器不可能产生传统意义上的函数调用。一个非面向对象编译器产生的函数调用会引起所谓的“前期绑定”。这么做意味着编译 器将产生对一个具体函数名称的调用,而链接器将这个调用解析到将要被执行代码的绝对地址。在oop中,程序直到运行时刻才能够确定代码的地址,所以当消息 发送一个泛化对象时,必须采用其他的机制。为了解决这个问题,面向对象程序设计语言使用了“后期绑定”的概念。当你向对象发送消息时,并调用的代码直到运 行时刻才能被确定。编译器确保被调用的方法存在,并对调用参数和返回值执行类型检查,但是并不知道将会被执行的具体代码。

 

7、抽象基类和接口

 

     通常在一个设计中,你希望基类仅仅表示其导出类的接口,也就是说,你不希望所有人创建基类的对象,而只是希望他们将对象向上转型到基类,所以它的接口将派 上用场。这是通过使用abstract关键字把类标识成为抽象类来实现的。如果有人试图创建abstract类的对象,编译器都会加以阻止。

 

8、对象的创建、使用和生命周期

 

9、集合(collection)与迭代器(iterator)

 

10、单根继承

 

11、向下转型与模板/泛型

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值