- 与this对应,this对应的父类为super,可在子类中用super调用父类方法和父类构造器。
- final,可修饰数据、方法、类;private(隐式声明为private,因为不能被重写,研究底层时看看)
- static与final一起修饰的域只占据一块不能改变的存储空间。‘
- final类不能被继承,所以其中的方法也就默认的相当于都时final方法(不能被重写)了
- 结构化编程:先粗后细,先抽象后具体(自己能描述清楚,理明白了再动手);
- static属于类,可修饰数据、方法,不可修饰局部变量;(构造器隐式声明为static,归属类所有,底层实现待研究)
- finalize,在GC运行前执行,一般用来校验回收状态或回收GC不能回收的东西
- enum Day {SUNDAY,WESDAY}
- switch 开关语句,支持整型与枚举
- label: break label; continue label; Java中的goto
- 静态代码块static{} 与常规代码块{}进行变量初始化
- 向上转型:把对某个对象的引用视为对其基类类型的引用的做法 kill(People p){} kill(new Student())
- 绑定:将一个方法调用同一个方法主体关联起来被称作绑定。
- 前期绑定:在程序执行前进行绑定(如果有的话,由编译器和连接程序实现)
- 后期绑定:运行时根据对象的类型进行绑定,动态绑定、运行时绑定
- Java中除了static方法和final方法(private方法属于final方法)
- 对于多态,只有普通的方法调用可以是多态的,如果你访问某个域,这个访问就将在编译器进行解析(Thinking In Java)。有这种现象
public class DuoTai {
public static void main(String[] args) {
Super superSon = new Son();
System.out.println("superSon.fieldStr---"+ superSon.fieldStr
+" superSon.getField()---"+ superSon.getField()
+" superSon.getPrivateField()---"+ superSon.getPrivateField());
Son son = new Son();
System.out.println("son.fieldStr---"+ son.fieldStr
+" son.getField()---"+ son.getField()
+" son.getPrivateField()---"+ son.getPrivateField()
+" son.getSuperField()---"+ son.getSuperField());
}
}
class Super {
public String fieldStr = "Super";
private String privateField = "privateSuper";
public String getField(){
return fieldStr;
}
public String getPrivateField(){
return privateField;
}
}
class Son extends Super {
public String fieldStr = "Son";
private String privateField = "privateSon";
public String getField(){
return fieldStr;
}
public String getSuperField(){
return super.fieldStr;
}
public String getPrivateField(){
return privateField;
}
}
结果:superSon.fieldStr---Super superSon.getField()---Son superSon.getPrivateField()---privateSon
son.fieldStr---Son son.getField()---Son son.getPrivateField()---privateSon son.getSuperField()---Super
解释:对于一个持有子类对象的父类引用,如下图,操作过程是子类从父类继承所有,然后若子类的域或方法覆盖了父类的,则替换掉父类的东西,即为有着子类新东西的老父亲,你只能用父类有的东西,但是东西是新的。
- Java的初始化顺序,当某个类被调用时,先找寻是否有对应的父类,然后初始化父类。然后先是静态域的自动初始化(存储空间初始化为二进制0),然后是代码的初始化,然后是普通域的初始化。
- 一般Java无需进行清理操作,若需要则与初始化顺序相反,所以在清理方法中应该在最后调用父类的清理方法super.xxx()
- 在基类中最好不要使用后续可能被重写的方法,这在多态情况发生时可能会产生某些错误,因为先初始化的是父类,动态调用子类方法时候,可能会出现错误,推荐若是构造器中调用方法的话,调用final的
- 重写,子类重写父类的方法,子类的返回类型可以是父类方法返回类型的子类型(协变返回类型)