1.继承中的构造方法
继承解决代码复用问题!
子类的构造过程中必须调用其父类的构造方法,否则是无源之水了。如果子类的构造方法中没有显式的调用基类构造方法,则系统默认调用基类无参数的构造方法。
子类可以在自己的构造方法中使用super([参数列表])调用基类的构造方法,使用this([参数列表])调用本类的另外的构造方法。
注意:如果调用super,必须写在子类构造方法的第一行!
2.对象转型(casting)
一个基类的引用类型变量可以"指向"其子类的对象,也就是说形参是父类时,可以传入其子类的实例。
一个基类的引用不可以访问其子类对象新增加的成员属性和成员方法。
可以使用 引用变量名 instanceof 类名 来判断引用变量所指向的对象是否属于该类。
子类的对象可以当作基类的对象来使用称作相似转型(upcasting),反正成为向下转型(downcasting)。
3.多态(动态绑定)存在的条件
(1)要有继承
(2)要有重写
(3)父类引用指向子类对象
当上述三个条件满足时,当调用父类中被重写的方法时,new哪个子类对象,就调用该子类对象的方法。
多态性:当父类引用指向子类对象时,如果子类有方法,则调用该子类的方法,如果没有,则调用父类的方法。
4.抽象类:public abstract void enjoy();
适用条件:当父类中的方法不确定时,可以声明为抽象方法,被子类重写
含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写
抽象类不能被实例化
抽象方法只需声明,不需实现
抽象类中不一定必须要有抽象方法,还有抽象方法的类必须为抽象类
5.final
可以修饰变量、方法和类
变量的值不能被改变 final int i = 8; public void m(final int j){ j = 9;//错误,j不能被改变}
方法不能被重写 public final void m(){}
类不能被继承
String类就是final类:public final class String extends Object
Math类也是final类:public final class Math extends Object
6.将对象之间公共的方法设置为抽象的,让子类继承实现该方法
例如Animal类sleep()方法
7.JNI
JNI允许JVM内部运行的Java代码能够与用其他编程语言编写的应用程序和库进行相互操作。
JNI可以理解为Java和本地应用程序之间的中介。
什么时候使用JNI?
如果想访问OS特有的功能,想要和特殊的硬件沟通,利用其他语言实现,然后利用JNI和java沟通。