今天学习了第六七章的内容,还看了第九章接口的一些内容;下面是所有的内容:
第六章:访问权限控制
访问权限主要是类程序员在内部构成和功能实现之间添加的一道保护程序,外部程序员只需要掌握使用方法,而不必要明白内部的具体实现方法;而且这样分离功能和实现也让类的升级维护更加方便;
包相当于是一个命名空间。package access.myclass 这个实例中,package相当于是CLASSPATH的目录,后面的是在该目录下的文件夹目录,这个类文件就要放在这个文件夹下才可以被正确import和访问;并且这个文件的名字必须和内部的public类的名字一样;
对于类来说,访问权限分成两个部分:包访问权限 和包外其他类的访问权限;
当类为默认的访问权限时,其实也叫做friendly权限,此时这个类的数据可以被包内其他类任意访问,包外的类则不能访问;
当访问权限为protected时,它可以被包内其他类访问,也可以被包外的 该类的子类所访问;其他的则不能访问;
public标记的元素可以被所有的类访问,无论包外还是包内;而private标记的元素只能在此类中访问,若用它标记了构造器,则在外部不能用new关键字来初始化对象;
对于一个。class文件来说,有一些默认的规则:1.内部只能有一个public类,而且该类的名字和文件名一样,作为统一的接口;2.内部也可以不含有public类,只含有其他权限的类;
第七章:复用类
对于类的复用,主要的方式有两种:组合 继承,一般情况下用组合,可以减小代码麻烦;
对于类的初始化顺序,一般是先初始化静态变量/方法,再初始化局部变量/方法,最后调用类的构造器;
组合是把类当做另一些类的内部元素,相当于是为其他类添加功能或部件;初始化顺序则看上面的步骤;
继承:用extend继承,这个是在子类的基础上扩展一些其他的功能;如果父类构造函数带参,则需要在子类的构造器中用super的方式调用父类的构造器,以防初始化错误;
对于继承类的初始化顺序:先初始化父类的静态变量-》子类的静态变量-》父类非静态成员-》父类构造函数-》子类非静态成员-》子类构造器;
代理:这是一种介乎两者之间的方法,在子类中创建父类对象,然后在子类的方法中调用父类对象实现父类对应的方法;(public void show(Shape s) { s.show( ); } )
用try-finally方法可以完成一定要做的事情,就像以前的finalize()类似,在try中申请内存,然后执行完try后一定会执行finally,如果父类也需要的话就用super调用父类的对应清理函数;
向上转型:指的是继承关系中,在以子类为参数的时候,提供父类,父类可以通过父类和子类的同名函数调用自己重载过的函数。这种情况下就相当于把基类当做一种接口,它可以实现不同子类的同一个方法,尽管这个函数不知道这个子类的信息和名称;
final 标记:表示不能修改的数据,在类中用final标记了类中变量,则该变量再对象中初始化了就不能再修改,它只能指向堆栈中的固定内存块;final + static可以创建出一个常亮来,在java中这些变量用大写和下划线命名;final在定义事可以不初始化(叫空白final),但是在使用前,这个变量必须要初始化;
final类代表这个类不能被继承,final方法代表该方法不能被重载,这也是一种保护的方式;
第九章:接口
当一个类的基础方法被很多子类重载时,它就可以制作成一个接口(interface);就像是抽象方法,只定义名字,返回值,参数,而完全不管怎么实现,在子类中用不同的方法实现;这里很需要用到向上转型;
如果再子类中没有完全申明接口中的抽象方法,则这个子类也叫抽象类,不能创建自己的对象;继承接口叫implement;
接口就相当于是一种入口,只要符合某种规则,任何的类都可以通过接口访问调用公共的方法,尽管这个方法在各自的类中进行了不同的定义;子类在接口上相当于是一种扩展,进入以接口为参数的函数类,则只能调用接口中定义的方法;实现的功能则是在子类中自己定义的功能;
多重继承用implement,逗号隔开,应用向上转型,它可以适用于任何以接口为参数的函数;
用继承来扩展接口:接口继承也可以用implement,也可以用extend来继承多个基类接口,但是有一点关键的:当遵循这个接口来编写类时,一定要把接口中所有定义的方法全部在类中实现,不然这个类是抽象类,不能创建对象起作用;
今天的知识很杂,而且脑子也很烦,所有以后有时间还是要重新看一遍,毕竟这些很重要;