复用类 其二

来源:互联网 发布:su建模软件 编辑:程序博客网 时间:2024/04/29 11:39

复用类 其二

接着上一天的复用类的内容

在组合与继承之间选择

组合和继承都允许在新的类中放置子对象。组合是显示地做。而继承则是隐式地做。

组合技术通常用于想在新类中使用现有类的功能而非它的接口。

一般情况下,我们既希望在新类中嵌入某个对象,来实现该对象的一些功能;又希望新类的用户看到的只是为新类所定义的接口,而不像其展示所嵌入对象的接口。为了实现这种效果,我们需要将新类中嵌入的现有类对象声明为private。

但有时,为了让客户端程序员更好的去使用一些类,尤其是当类的组装也是问题的一部分时,我们可以使用public。

protected关键字

允许任何继承于此类的导出类,或是其他任何位于同一个包内的类去访问。

尽管可以创建protected域,最好的方式还是将域保持为private;你应当一直保留“更改底层实现”的权利,然后通过protected方法来控制类的继承者的访问权限。

向上转型

将一个导出类的对象的引用,传递给他的基类中的一个方法并实现,这种将导出类引用转换为基类引用的动作被称为向上转型。

final

不想改变一个数据,一般情况下出于两个理由: 设计 或是 效率。

1.final数据

显然,将一个数据声明为final类型,表明我们希望该数据在恒定不变的,是一个常量。

在Java中,这类常量必须是基本数据类型,并且以关键字final表示。再对这个常量进行定义的时候,必须对其进行赋值。

编译器遇到这种常量时,会将其带入任何可能用到它的计算式中,从而可以减轻一些运行时的负担。

对于对象引用,final使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身却是可以被修改的

既是static又是final的域一般用全大写表示。

即使一个数据被声明为final,编译时也可能不知道他的值,比如 final int i = rand.nextInt(20);

空白final:
Java允许生成空白final,即一个域被声明为final,同时有没有被赋予初值。无论什么情况,编译器都确保空白final在使用前必须被初始化。但是,空白final在关键字final的使用上提供了更大的灵活性。
比如,一个类中的final域就可以做到根据对象而有所不同,却又保持了其恒定不变的特性。

2.final方法

如今,使用final方法的原因主要是为了确保在继承中方法的行为能够不被改变,并且不会被覆盖。

final与private关键字

类中所有的private方法都被隐式地指定为final。

3.final类

当将一个类直接定义为final时,任何人都不能修改它,同时该类也永远不应该有子类。

对于final类的域,它们未必是final的。而对于final类的方法,都隐含的指定为是final的,因为你无法覆盖他们。

原创粉丝点击