super要害字:你可能会在derived class 的函数中(比如是a())调用base class中的某个函数(通常也是a()),这个时候你当然不能直接调用,因为相同的标志符会造成递归.为了解决这个问题,提供了要害字super。他代表超类(superclass),所以你可以如此调用:super.a();
base class的初始化:调用base class构造函数。Java编译器会自动在derived class构造函数中插入对base class默认构造函数的调用动作。但假如你的class不具备default构造函数,或者你想调用带有引数的base class构造函数,你便得运用要害字super,并搭配适当的引数列,明白的写出调用动作,比如说super(i);(注重这和调用一般成员函数的语法有所不同哦)。此外,对base class构造函数的调用,必须是derived class构造函数所做的第一件事(假如你做错了,编译器会提醒你)。
final data:用来告诉编译器某块数据是"固定不变的".用处如下: 1.使用不改变的"编译器常量(compile-time constant)". 2.可以在执行期(run-time)被初始化,而你却不想在改变它。 假如某一数据及时static也是final,他们它拥有一块无法改变的存储空间。 Blank finals:Java答应产生"留白的finals",即答应我们将数据成员申明为final同时可以不给初值,任何情况下,blank finals必须在使用之前进行初始化,编译器会强制保证。不过blank finals比final提供了更多的弹性。因为如此class内的final数据成员便可以在每个对象中有所不同。 Final arguments:将引数申明为final,意味着你无法在此函数中令该引数(一个reference)改指他处。 当基本类型引数申明为final时,表示你可以读取引数所代表的值,但无法改变该值。
final method:使用它的原因有二: 1.锁住这个函数,保证不被derived class 复写(override),这是种设计上的考虑。 2.答应编译器(但此动作不一定产生,编译器此时会有个判定动作)将所有对此函数的调用动作转化为inline(内联)调用。这是种效率上的考虑。 由于以上两点同时会起作用,所有有时候你必须权衡一下值不值得用final method:比如说某个函数很小你想把它转化为内联函数但是此时它会完全失去被override的可能性。所以最好是在某个函数镇的体积很小或者你真的不希望他被复写时,才将他申明为final。 class中的所有PRivate函数自然而然的会是final,因为他们无法被别类取用,更无法被复写。这说明了一点很重要的性质:覆写(overriding)只能够发生在"函数属于base class接口"时。
final classes:原因是你不希望它被继续(要么你是处于保密性考虑要么你是出于设计上的考虑) 请注重,不论class是否为final,数据成员data都可以或者为final,或者不为final. 但final class 中的所有函数也都自然是final的了,因为他们不可能被覆写。