zoukankan      html  css  js  c++  java
  • 课堂作业05继承与多态

    第七讲  继承与多态

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

    1. 由于子类是继承父类的,所以想用子类创建对象时,必须先创建父类的对象,这样子类才能有父类的属性和方法。在创建对象时如果父类的数据需要进行初始化,那么就需要调用父类的构造函数,使构造函数初始化。

    2. 不能反过来

    3. 原因:因为父类不知道子类有什么属性,而且反过来子类也不能得到父类初始化的变量。

    二、运行以下测试代码:

    1. 左边的程序运行结果是什么?

    1. 你如何解释会得到这样的输出?

    父类对象引用子类对象时,由于对象是子类型的,调用子类型的方法,所以最后一个parent.printValue()201.

    2. 计算机是不会出错的,之所以得到这样的运行结果也是有原因的那么从这些运行结果中,你能总结出Java的哪些语法特性?

       语法特性:

    1)当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

      2)如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

        3)如果子类被当作父类使用,则通过子类访问的字段是父类的!

    三、请使用javap查看编译器为TestPolymorphism.java生成的字节码指令,然后通过互联网搜索资料,尝试从底层开始理解Java编译器是如何为多态代码生成字节码指令,在程序运行过程中,多态特性又是如何实现的。

    1.强制的:一种隐式做类型转换的方法。

    2.重载的:将一个标志符用作多个意义。

    3.参数的:为不同类型的参数提供相同的操作。

    4.包含的:类包含关系的抽象操作。

    多态依赖于类型和实现的分离,多用来把接口和实现分离。

    四、1.多态对开发到底有什么好处呢?

       当你要修改程序并扩充系统时,你需要修改的地方较少,对其它部分代码的影响较小!千万不要小看这两个“较”字!程序规模越大,其优势就越突出。

    2.为什么它被看成是面向对象编程技术中最重要的特性之一?

    子类重写父类方法,然后用父类引用指向子类对象,调用方法时候会进行动态绑定,多态对程序的扩展具有非常大的作用。

    四、这种编程有什么不合理的地方?

    可以建立feedAnimals方法,让他去接收一个Animals数组,然后后面就可以只需要一句代码,就可以模拟出喂食过程。

    五、下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?

    m=d;

    d=m;

    d=(Dog)m;

    d=c;

    c=(Cat)m;

    第二句和第四句会发生错误。

    原因:基类对象赋值给子类对象必须要进行强制类型转换,所以第二句会发生错误;两个字类类型数据之间也不能够直接赋值。

  • 相关阅读:
    COM编程-注册DLL形式的COM服务器
    控制台console使用MFC库函数,Cout输出CString的方法
    [C#]窗体切换--避免开启多个线程
    OpenCV配置使用版
    Dependency Walker使用说明
    TCP粘包和半包的处理方法
    GENERATED_UCLASS_BODY 和 GENERATED_BODY 区别
    c++ 的 坑真多之头文件
    Introduction to replication 翻译
    c++ 的 static_cast
  • 原文地址:https://www.cnblogs.com/gcc1828129658/p/7813803.html
Copyright © 2011-2022 走看看