《Java编程思想》阅读笔记2
1.访问权限控制
(1)权限使用的必要性:本来对权限控制没什么特别的概念,书中的类库维护者与使用者的博弈让自己有点感触:很多原因使得类库的版本不断更新,类库维护者希望能进行改进;而类库的使用者希望类库尽量不去修改他已经使用的,怎样来区分的,访问权限的控制从一方面限定了类库维护人员与使用者的矛盾,有了public、protected、包访问权限(没有关键词)和private;但是这也有些问题,就是随着不断的改进,必须将很多原有的接口保留,又提供很多新的接口,这样随着时间将会是沉重的包袱。
(2)单例模式:不去详解模式,从private权限来看。除了内部类,类的访问权限只能是public或包访问权限(即没有关键词修饰);如果希望控制类的创建,可利用private将类的构造器变为仅有内部可用,再通过static函数调用,从而控制该类对象的创建。
2.复用类
(1)组合:将已有的类增加到新类中。已有类就像普通基本数据类型一样被使用,但是类中的基本数据类型能够自动被初始化,对象引用会被初始化为null,因此应确保在对象使用之前能够被创建。例如,即使没有被初始化,也会利用toString()输出null,toString()帮助字符串操作与输出。可以重载这一方法,输出需要的更详细的信息。
(2)继承:每个类中都可以有一个main方法,但是pubulic的类只有一个,可使每个类的单元测试都变得简单易行。main方法的调用受到命令行的限制,调用谁的(类),就会执行谁的main方法,即使该类不是public的。
当基类显示的定义了带参数的构造器,则再继承的子类中需要使用super显示调用;
代理:是在组合的基础上,在新类中有选择地调用(实现)了其中(旧类)的方法。
正确的清理:在除内存回收(可由垃圾回收)外,其余的清理工作,从基类到子类都应显示地在清理函数中调用,基类的清理在子类的清理函数中,super调用,类似c++的函数调用;
覆盖:在Java中基类的某个方法进行了重载,在继承的子类对该方法的覆盖同样可以使用,可以使用@overide来注解帮助,说明为覆盖了基类的方法。
向上转型:由于继承机制,使得子类具备了基类所能够处理的所有信息能力,因此在java的类型检查中,在参数等传递过程中子类就看成向上转型为其基类使用了。
final与static:final可以在运行时确定不变,但是同一个类的不同对象可拥有不同的值,例如有final int a=rand.nextInt(),而static则所有对象仅拥有一份拷贝
空final变量:在类的定义中,使用空白final(如 final int a;),可以通过构造带参数的构造器,在构造器中进行初始化(用其他方式不行,直接编译不过去),从而实现灵活的设置,不同的对象在初始化时根据需要设置不同的final对象的值;
final参数:类似于c++中的const,在方法中无法修改所引用的对象;
final方法、类:final可以将方法、类锁定,防止继承、覆盖。