eclipse
JDK
温故知新 前段时间老黑介绍了面向对象三大特征之一——继承,这次让我们简单温习一下吧。 佛家有云,有因必有果,那么继承的诞生究竟有什么意义呢,我们可以通过结果来推测因由,现在看看继承的特点。 首先,继承的机制渗入Java编程语言体系结构,俗话说,Java一切皆继承。这样程序员只要了解父类,对于其所有子类的调用心里就可以明白一二了。 其次,继承可以减少开发时间成本,减少无意义开发,代码便于管理。假如我们在负责一个中大型项目时,这时项目架构师的作用尤为重要,选择适合客户经理的业务需求的框架,还有最重要的是处理好父类,剩下的就可以让码农继承开发去了。 继承还有许多优点不一一赘言,因为继承机制好,所以有存在的意义,更值得我们学习。
方法的重写 子类继承父类后,当然子类可以继承父类的方法,还有更重要的一点,子类可以重写父类的方法,即子类的方法名和参数列表与父类的方法如出一辙,但方法的实现不同(相同的话没有必要重写哦>_<'')。 接下来重点来了,请认真理解,无论父类型还是子类的引用调用子类重写之后的方法,JVM运行的都是子类重写的方法。明白这句话,方法的重写你就学妥了,先插播一段代码如下: 父类代码如下: public class Father { private String name; private String age; private String gender; public void sayRole() { System.out.println('我是爸爸'); } } 子类代码如下: public class Son extends Father { public void sayRole() { System.out.println('我是儿子'); } public static void main(String[] args) { Father father = new Son(); Son son = new Son(); father.sayRole(); son.sayRole(); } } 运行结果是: 我是儿子 我是儿子 解析:从结果看来,无论是子类的引用还是父类的引用调用重写之后的方法,运行的方法都是子类重写后的方法。实际上,方法的重载是运行期的过程,java在运行后,才会创建对象,根据对象调用相应的方法。
语法上的区别 有许多人,重载(overlaod)和重写(override)傻傻分不清,这两个概念是Java面试常考题目。无论怎样,要想分清他们俩看这篇文章绝对够用了。 1、重载是在一个类中定义方法名相同但参数列表不同的方法,如下伪代码: public void 支付(储蓄卡){} public void 支付(储蓄卡, 信用卡, 微信, 支付宝){} 2、重写是指子类继承父类后,子类中定义与父类完全一样的方法,如下伪代码: public 父类{ public void car(){ 我能开汽车} } public 子类 extends 父类{ public void car(){我能开大型货车} } 分析:重载是在一个类中定义的方法,重写是在几个类中定义的方法。
示例代码 重写代码: public class Super { public void say() { System.out.println('我是父类'); } } class Sub extends Super{ public void say() { System.out.println('我是子类重写方法'); } } 重载代码: class Goo{ public void start(Super sup) { System.out.print('父类开始说'); sup.say(); } public void start(Sub sub) { System.out.print('子类开始说'); sub.say(); } } 测试代码: Super sup = new Sub(); Sub sub = new Sub(); Goo g = new Goo(); g.start(sup); g.start(sub); 运行结果是: 子类开始说:我是子类重写方法 父类开始说:我是子类重写方法
运行过程上的区别 重载属于编译器绑定,即java在编译时根据方法的参数列表判断去调用哪个方法; 重写属于运行期绑定,即java在运行期根据引用变量类型指向的对象类型判断调用哪个方法。