【学习笔记】Thinking in java (第三版)第六章 Reusing Classes(复用类)

类别:Java 点击:0 评论:0 推荐:

类的复用:
1 在新的类里面直接创建旧的对象.这种方式被称为合成(composition).
2 创建一个新的,与原来的那个类同属于一种类型的类.你全盘接受了旧类的形式,在没有对它做修改的情

况下往里面添加了新的代码.这种方法叫继承(Inheritance).

如果你想对reference初始化,那么可以在以下几个时间进行:
1 在定义对象的时候.这就意味着在构造函数之前,这们已经初始化完毕了.
2 在这个类的构造函数里.
3 在即将使用那个对象之前.

继承语法(Inheritance syntax)
继承是Java最重要的概念.实际上当你创建类的时候,你就是在继承.要么显示的继承了别的类,要么隐含地

继承了标准Java根类,Object.继承使用了extends关键字.

继承不仅仅是拷贝基类的接口.当你创建了一个派生类的对象,这个对象里面还有一个基类的子对象

(subobject).构造行为是从基类"向外"发展的,所以基类会在派生类的构造函数访问它之前进行初始化.即

编译器会强制你将基类构造函数的调用放在派生类的构造函数的最前面.假如类没有默认的构造函数,或者

你在调用的基类构造函数是带参数的,你就必须用super关键词以及合适的参数明确地调用基类的构造函数

.

确保妥善地清理
如果你要妥善地进行清理,一定要自已写清理方法,别去用finalize().执行的顺序与创建对象的顺序相反.

名字的隐藏(Name hiding)
一个类继承了另一个类,它的一个方法也重载了另一个方法.要这个类里面基类的方法依然有效.即基类的

方法派生类也有.派生类是基类的超集,里面可能有一些基类没有的方法.因此,"上传"(upcasting)总是安

全的."下传(downcasting)"可能会发生问题.

继承的优点之一是支持渐进式的开发(incremental develop).添加新代码的时候不会给老代码带来bug.

继承尽管占有很重要的地位,但是不要滥用.

It’s important to realize that program development is an incremental process, just like

human learning. You can do as much analysis as you want, but you still won’t know all the

answers when you set out on a project. You’ll have much more success—and more immediate

feedback—if you start out to “grow” your project as an organic, evolutionary creature,

rather than constructing it all at once like a glass-box skyscraper.

final关键字

Java的final关键字根据上下文的不同含义也有所不同.但总的来说,它的意思是"这个东西不允许改动

".final的三种用途:数据(data),方法(method),类(class).

final的数据

常量(constant):
常量用于以下两种情况:
1 可以是"编译时的常量(compile-time constant)",这样就再也不能改了.
2 也可以是运行时初始我化的值,这个值你以后不想改了.

Java中这种常量必须是primitive型的,而且要用final关键字表示.这种常量的赋值必须要定义的时候进行

.一个即是static又是final的数据成员只会占据一段内存,并不可修改.当final不是指primitive,而是用

于对象的reference的时候.final的意思是这个reference是常量.初始化的时候,一量将reference连到某

个对象,那么它就再也不能指向别的对象.
空白final数据(blank final),也就是说把数据成员声名成final的,但没有给初始化值.你必须先初始化,

再使用空白的数据成员,而且编译器会强制你这么做.

final参数:你可以读,但是不能改参数.

final方法:
目的有二:第一,禁止派生类进行修改.第二,就是效率.如果方法是final的,那么编译器就会把调用转换成

内联的.不过,最好不要把效率问题留给编译器和JVM去处理.

private方法隐含有final的意思,你可以给一个方法加一个final修饰符,但是这样做什么意义也没有.如果

方法是private的,那么它就不属于基类的接口.它只能算被类隐藏起来.如果你在派生类中创建同名的

public,protected或package方法,它们是没有任何联系的.你并没有覆写那个方法.

final类:
把整个类都定义为final的,就等于宣布,你不会去继承这个类,也不允许别人去继承这个类.但这样也是没

有意义的.

类的装载:
在较传统的语言中,程序启动的时候都是一次装载所有的东西,然后进行初始化,接下来再开始执行.
在Java中,编译之后每个类才都是保存在它自已的文件里.不到需要的时候,这个类是不会被装载的.

本文地址:http://com.8s8s.com/it/it11894.htm