…烦人
第六章 访问权限控制
当编写一个Java源代码文件时,此文件通常被称为编译文件。每个编译单元都必须要有一个后缀名.java
,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同public类,该类的名称必须与文件的名称相同。
private对于多线程有用,可能想控制如何创造对象,并组织别人直接访问某个特定的构造器(或全部构造器)。
接口和实现
访问控制的控制常被称为是具体实现的隐藏
。把数据和方法包装进类中,以及具体实现的隐藏,常共同被称为是封装
。
出于两个原因,访问权限控制将权限的边界划在数据类型内部:1.要设定客户端程序员可以使用和不可以使用的界限。2.接口和具体实现进行分离
第七章复用类
组合:在新类中产生现有类的对象,由于新的类是由现有类的对象所组成,所以这种方法被称为组合。
继承:按照现有类的类型来创建新类,无需改变现有类的形式,采用现有类的形式并在其中添加新代码,这种方式被称为继承。
当创建一个类时,总是在继承,因此,除非已经明确指出要从其他类中继承,否则就是在隐式地从Java的标准根类object进行继承。
如果没加任何访问权限修饰词,那么成员默认的访问权限就是包访问权限。
为了继承,一般是将所有数据成员都指定为private,将所有方法都指定为public
使用基类方法及对它进行修改是可行的。
你可能想要在新版本中调用从基类继承而来的方法,但是不能直接调用例如:在f()内调用f();
,因为会产生递归问题。应当用super关键字表示超类
,所以super.f()
Java自动在导出类的构造器中插入对基类构造器的调用。
第三种关系叫代理
。继承与组合的中庸之道。
我们将一个方法成员对象置于所要构造的类中(就像组合),但与此同时,我们在新类中暴露了该成员对象的所有方法(就像继承)
(不是很懂)
有时候类可能要在其生命周期内执行一些必需的清理活动,但我们并不知道垃圾回收器何时被调用,或它是否被调用。因此我们可以显式编写一个特殊方法来清理,并确保客户端程序员知晓他们必须调用这个方法。其首要任务就是:必须将这一清理动作置于finally子句中,以预防异常的出现。
组合和继承都允许在新的类中放置子对象。
组合通常用于想在新类中使用现有类的功能而非它的接口。
必须在域的定义处或者每个构造器中用表达式对finally进行赋值,这正是finally域在使用前总是被初始化的原因所在。
类中所有的private方法都隐式指定为是final的。
当将某个类的整体定义为final时,表明不打算继承该类,而且也不允许别人这样做。