多语言展示
当前在线:1886今日阅读:86今日分享:14

老黑讲Java之面向对象开发——方法的重写

大家好!休息一段时间后,老黑将继续更新Java相关知识,希望老黑的努力能帮助更多喜欢Java的朋友。今天讲述Java面向对象——方法的重写,有人会问,什么是方法的重写?还有方法的重写与方法的重载有什么异同呢?那么接下来,让我们一起揭开它的神秘面纱吧!
工具/原料
1

eclipse

2

JDK

方法/步骤
1

温故知新    前段时间老黑介绍了面向对象三大特征之一——继承,这次让我们简单温习一下吧。    佛家有云,有因必有果,那么继承的诞生究竟有什么意义呢,我们可以通过结果来推测因由,现在看看继承的特点。    首先,继承的机制渗入Java编程语言体系结构,俗话说,Java一切皆继承。这样程序员只要了解父类,对于其所有子类的调用心里就可以明白一二了。    其次,继承可以减少开发时间成本,减少无意义开发,代码便于管理。假如我们在负责一个中大型项目时,这时项目架构师的作用尤为重要,选择适合客户经理的业务需求的框架,还有最重要的是处理好父类,剩下的就可以让码农继承开发去了。    继承还有许多优点不一一赘言,因为继承机制好,所以有存在的意义,更值得我们学习。

3

方法的重写    子类继承父类后,当然子类可以继承父类的方法,还有更重要的一点,子类可以重写父类的方法,即子类的方法名和参数列表与父类的方法如出一辙,但方法的实现不同(相同的话没有必要重写哦>_<'')。    接下来重点来了,请认真理解,无论父类型还是子类的引用调用子类重写之后的方法,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在运行后,才会创建对象,根据对象调用相应的方法。

方法重载与重写的区别
1

语法上的区别   有许多人,重载(overlaod)和重写(override)傻傻分不清,这两个概念是Java面试常考题目。无论怎样,要想分清他们俩看这篇文章绝对够用了。   1、重载是在一个类中定义方法名相同但参数列表不同的方法,如下伪代码:        public void 支付(储蓄卡){}        public void 支付(储蓄卡, 信用卡, 微信, 支付宝){}    2、重写是指子类继承父类后,子类中定义与父类完全一样的方法,如下伪代码:      public 父类{           public void car(){ 我能开汽车}      }      public 子类 extends 父类{           public void car(){我能开大型货车}     }   分析:重载是在一个类中定义的方法,重写是在几个类中定义的方法。

2

示例代码    重写代码:    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);       运行结果是:   子类开始说:我是子类重写方法   父类开始说:我是子类重写方法

3

运行过程上的区别    重载属于编译器绑定,即java在编译时根据方法的参数列表判断去调用哪个方法;    重写属于运行期绑定,即java在运行期根据引用变量类型指向的对象类型判断调用哪个方法。

推荐信息