第二天,进度 page144-173
今天遇到了一个小状况,就是page144-154这一部分是讲关于jre和javadoc的知识,内容比较难理解,且考虑到目前可能用的不多,所以决定跳过这一部分,从page155的继承和多态开始学习
记录
抽象类不能实例化,但可以定义一个抽象类的对象来引用非抽象子类的对象
可以用instanceof判断一个对象是否引用了该类或该类的某个子类,若引用了该类的子类,则(对象 instanceof 该类)返回true值
可以用final标记类或方法以阻止继承,即不能创造子类(当final标记类)或在子类中重载该方法(当final标记方法),另,若final标记了类,则该类中所有方法都会被标记为final
一个超类对象要调用子类中的方法,则该方法必须在超类中出现过,如果要调用的一个方法在子类被重载了,且重载后参数类型与重载前相同,则优先调用子类里的该方法
this能调用另一个构造器,如
public Employee(double s){
//public Employee(String ,double); -- 一个简写的构造器
this("Employee #" + nextId , s);
nextId++;
}
关于jre的理解
jre相当于是一个针对class文件适配(像手机系统主题中的软件深度适配之类的适配)的压缩包,里面还有清单目录和javadoc注释文档
Manager boss = new Manager("cyy", 50000, 1999, 12, 1);
Employee[] staff = new Employee[3];
staff[0] = boss;
staff[0].setBonus(500); //error
staff[0].getSalary(); //ok
staff[0]使用setBonus方法修改bonus值会报错,但却可以使用getSalary方法访问bonus的值
这里的staff[0]被编译器视作Employee类,所以staff[0]不能访问Manager里的任何字段,若staff[0]要调用引用了的子类中的方法,则该方法必须在超类中出现过,Manager类中重载了getSalary方法,但没有重载setBonus方法,如果要调用的一个方法在子类被重载了,且重载后参数类型与重载前相同,则优先调用子类里的该方法
关于抽象的作用
抽象类一般用于祖宗类,凡是含有抽象方法的类必须定义为抽象类,抽象方法可以理解为是一个模板,它的各个子类都需要用到这个模板,如果不用抽象方法实现(它的各个子类都需要用到这个模板)时就需要对在祖宗类该方法进行返回空值或返回null之类的处理,比较不规范,用abstract标记为抽象比较规范