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

2025-10-02 00:12:50

1、温故知新

    前段时间老黑介绍了面向对象三大特征之一——继承,这次让我们简单温习一下吧。

    佛家有云,有因必有果,那么继承的诞生究竟有什么意义呢,我们可以通过结果来推测因由,现在看看继承的特点。

    首先,继承的机制渗入Java编程语言体系结构,俗话说,Java一切皆继承。这样程序员只要了解父类,对于其所有子类的调用心里就可以明白一二了。

    其次,继承可以减少开发时间成本,减少无意义开发,代码便于管理。假如我们在负责一个中大型项目时,这时项目架构师的作用尤为重要,选择适合客户经理的业务需求的框架,还有最重要的是处理好父类,剩下的就可以让码农继承开发去了。

    继承还有许多优点不一一赘言,因为继承机制好,所以有存在的意义,更值得我们学习。

2、继承的泛化过程和extends关键字

    将重复的代码提取出来,放在一个公共类中这个过程称为泛化,通常这个过程在设计初期完成。

    使用extends关键字,使得子类继承父类,伪代码如下:

    class 子类 extends 父类{

    }

0老黑讲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在运行后,才会创建对象,根据对象调用相应的方法。

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

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

老黑讲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);

   

    运行结果是:

   子类开始说:我是子类重写方法

   父类开始说:我是子类重写方法

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

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

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

3、运行过程上的区别

    重载属于编译器绑定,即java在编译时根据方法的参数列表判断去调用哪个方法;

    重写属于运行期绑定,即java在运行期根据引用变量类型指向的对象类型判断调用哪个方法。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢