一、方法覆盖函数
方法覆盖就是子类定义一个和父类同名的方法来覆盖父类的方法。当父类方法在某些子类中被覆盖后,一般是子类调用父类,并作一些额外的其它工做。spa
使用方法覆盖应注意下面一些事项:对象
不使用super而但愿引用父类方法会致使无限的递归,由于子类方法其实是在调用它本身。继承
当经过父类引用调用一个方法时,Java会正确地选择与那个对象对应的类的覆盖方法。对于父类提供的方法,子类能够覆盖它,但这不是必须的,即子类也可使用一个方法的父类版本。递归
方法覆盖中,子类在从新定义父类已有的方法时,应保持与父类彻底相同的方法头声明,即与父类彻底相同的方法名、返回l类型和参数列表。编译器
子类能够添加字段,也能够添加方法或者覆盖父类中的方法。但继承不能去除父类中的任何字段和方法。 it
二、方法重载编译
方法重载是在本身的类内定义几个方法名相同但参数列表不一样的过程。与上面讲的方法覆盖不一样,方法覆盖是子类覆盖父类的方法,而方法重载是在自身一个类内进行定义的方法,只是定义的这些方法名相同但参数列表不一样。引用
既然在一个类中出现了相同的方法名,或许就有人问了,那程序在调用这些方法时是怎样进行的。其实,当程序在调用这些方法时,编译器是经过区分它们的参数列表来进行区分的。例如,如今有两个重载的方法,有的方法参数列表有一个参数,而另一个有两个参数,当程序调用这个方法时,编译器会经过查找你要调用的方法里面的参数个数来肯定你要调用哪一个方法。因此,若是在重载过程当中发现有两个或两个以上方法的参数列表一致,编译器则会报错,由于它不能区分你到底要哪一个方法。程序
Java中容许对任何方法重载。同时要注意,若是重载的两个方法中两个方法的名字和参数列表一致,但方法返回类型不同,这种状况也会编译出错,由于这是不能区分重载方法的。
三、多态分为两种:
多态分为编译时的多态和运行时的多态。
编译时的多态是经过函数重载或运算符的重载来实现的。而运行时的多态是经过继承和虚函数来实现的,之因此称为运行时的多态是由于在程序执行以前,根据函数和参数还没法肯定应该调用哪个函数,而必须在程序的执行过程当中,根据具体的执行状况才能动态地肯定。
调用一个对象方法的机制:
编译器检查对象的声明类型和方法名。
编译器接着检查方法调用中的参数类型。若是编译器不能找到任何同参数类型匹配的方法,或者有多个方法都匹配转化后的参数类型,那么编译器会报告一条错误。如今编译器知道了须要调用的方法的名字和参数类型。
若是方法类型为private、static、final或者是一个构造器,那么编译器也会准确地知道应该调用哪一个方法,这称做静态绑定。与此相反,靠隐式参数的实际类型来决定调用哪一个方法叫作动态绑定,这必须发生在运行时。