继承关键字 extends
子类extends基类
重写(覆盖):子类和基类中方法和参数列表都相同
编译期----静态联编
运行期-----动态联编
多态发生在运行期,当基类为抽象类,子类为实现抽象类的重写方法时,基类对象调用子类中该抽象类的重写方法时,就会产生多态
RTTM 运行时的类型信息:
所有对象的类型对象都在class对象里面存储,方法与类型对应
java编译器把类的实例方法都默认处理成了virtual(虚函数)
重写权限不能降低,private基类/static方法/基类构造方法不能被重写,final 方法不能被重写或继承
抽象类与普通类的唯一区别:不能创建对象
抽象类内不一定有抽象方法,但抽象方法的类一定是抽象类
抽象类构造函数数可以发生多态
private可以继承,但继承过来不能被访问,static和final不能放在一起
接口:一种功能的约定,可定制,关键词interface , 实现连接词implements
类的继承只能继承一个基类,但接口可以被继承多个
Object类中有的方法:
getClass(); hashCode(); Clone(); equals(); toString(); finalize();
hashCode()用来返回对象的内存地址,不同对象hashCode()不同,
equals默认比较引用(地址),比较值需重写equals方法
clone可以产生新对象(相当于浅拷贝),可以自动产生构造函数,对象支持clone,必须实现clone接口,空接口称标记接口
final的三个使用1.定义常量 2,.定义方法 3.final 密封
finalize 调用时间不确定,回收释放本地资源,调用本地方法中的方法时必须使用finalize,只调用一次
hashcode 相同,equals一定相同
equals相同,hashcode 不一定相同
成员变量一般设置为private,如果该类设置基类,成员变量设置为pretect,成员方法打算为用户使用,方法实现为public
静态内部类不能访问外部类的成员变量,可以访问静态成员变量
外部类前可以加的修饰词有public / abstract /final /strictfp
单例模式:永远只能得到这个类的一个对象
快加载:在使用对象之前就已经new好了一个对象
慢加载:在需要使用对象进行调用对象时才new一个对象
JVm保证静态域内容开辟和初始化是一个原子操作(不会被线程调度机制打断的操作,一旦开始,就直到运行结束)
实例内部类:外部类的一个实例成员
实例内部类中不能定义static成员?
静态对象是默认加载的,静态内部类应该先于外部类被加载到内存中,而内部静态类不能直接被实例化,必须实例化外部类才能再去实例化它,矛盾。
本地内部类:把类定义在方法里面static/实例方法