zoukankan      html  css  js  c++  java
  • 动手又动脑——继承与多态

    1.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

             因为构造方法是用来初始化类的成员属性的,由于子类继承父类,拥有父类的成员属性,要对这些属性赋值,就要通过父类的构造方法。因此不能反过来。

    2.何为多态?
             面向对象的程序设计语言中,多态大致分为静态多态和动态多态。静态多态又称为编译时多态,具体表现为方法的重载。动态多态又称运行时多态,指利用父类引用子类的对象,并且对子类中已经重写的同名方法进行调用的过程,这个过程中需要动态绑定。比如有一个类base,类中有方法show(...),由它派生出几个子类。当base对它子类的对象进行引用,并调用这个show(...)方法时,如果该子类没有重写show(...)方法,那么会直接调用子类从base类中继承来的show()方法,但如果子类重写了这个方法show(...)(注意参数表不能改变),那么子类中将不在存放那个由父类继承来的show(...),而是存放已经重写的这个show(...)方法,这个时候父类会调用子类中的show(...)方法。而且最重要的一点是,多态是对于方法而言,与属性变量一点关系也没有。换言之

    看下面这个例子:

    应系主任要求我先预测下输出结果:

    Parent.printValue(),myValue=100
    Child.printValue(),myValue=200
    Child.printValue(),myValue=200
    101
    Child.printValue(),myValue=200
    Child.printValue(),myValue=201

    结果我的预测是对的,至于原因上面多态概念解释的差不多了,总之就是父类引用指向子类对象时,调用的方法如果子类未重写就调用父类的,反之相反,对于属性变量而言没有多态一说,所以尽管上面的例子中子类child重新定义了一个重名的属性变量myValue,不过parent的myValue是parent的myValue,child的myValue是child的myValue(就好像你老婆是你老婆,你妈是你爹的老婆一样),两个myValue变量只是一个覆盖了另一个,仅此而已,没有什么其他关系,和多态更是八竿子打不着。除非对父类的引用进行强制转换,比如上面这个例子中main方法中最后两句。

  • 相关阅读:
    acm入门 杭电1001题 有关溢出的考虑
    面向对象课后深入学习(C++ 类的静态成员详细讲解)
    Eclipse中导入项目后js报错解决方法
    mysql用户链接数
    配置服务器nginx 教程
    eclipse如何新建项目发布到git
    获取当天开始时间结束时间
    pdf在线加载·
    springmvc配置详解 教程
    hibulder中使用git教程
  • 原文地址:https://www.cnblogs.com/messi2017/p/7802245.html
Copyright © 2011-2022 走看看