课堂作业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;

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

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

时间: 2024-10-27 07:22:50

课堂作业05继承与多态的相关文章

05继承与多态

一. 继承条件下的构造方法调用 1.运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重大! 源代码: package lianxi7; class GrandParent { public GrandParent() { System.out.println("GrandParent Created"); } public 

课堂笔记--初识继承和多态 继承

第六章 初始继承和多态 继承:一个类可以使用另一个类的属性和方法(成为该类的成员) 子类继承父类使用的符号是冒号 子类不能继承父类的构造方法 子类不能访问父类的私有字段和方法 在调用子类构造的时候,没有使用base关键字调用父类的指定构造,那么默认调用父类的无参构造. 定义一个Person类 class Person { public string Name { get; set; } public Gender Sex { get; set; } public void SayHello()

动手动脑(课堂作业05)

1,思考 class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } } class Parent2 extends Grandparent { publi

动手动脑(课堂作业05)第二句错误显示为:类型不匹配:不能从 Mammal 转换为 Dog 第三句错误显示为:类型不匹配:不能从 Cat 转换为 Dog

---恢复内容开始--- 为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 构造函数(constructor)是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.构造函数的功能主要用于在类的对象创建时定义初始化的状态.构造一个对象,先调用其构造方法,来初始化其成员函数和成员变量.子类

课堂作业05 《6种质量属性战术》

实现xxxx系统质量属性战术 1.可用性战术:错误检测战术 对XXXX系统的所有信息的输入及数据处理进行异常的处理.尤其对信息进行填报时,编写异常类来捕获异常. 2.易用性战术:设计战术 (1)在进行归口部门填写时,可以使用搜索词进行提示,方便进行填写. 在填写需求征集表格时,对于用户已注册填写过的基本信息,可以折叠,看起来更加简洁明了. (2)将用户接口与应用的其余部分分离开来:为方便用户接口的修改.将用户操作界面与实现分开实现. 3.可修改性战术:局部化修改 设计登陆的泛化模块,不同身份登陆

Java课堂作业05

1.随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路:定义一个长度为10的数组---->数组初始化---->利用随机数给数组元素分别赋值--->转换成字符串求和--->输出结果 程序流程图: 程序源代码: 结果截图: 编程注意及总结: 编写该程序定义数组时一定要初始化,随机数产生也借助for循环.

课堂作业05

设计思路:(1) 将Id赋给第一个值,并使Times=1; (2)往后找,相同的帖子加1,不同的帖子减1.直到Times为0.然后将Id赋给最后一个处理的值. (3)最后处理完成后Times不等于0的那个Id便是水王.函数体:String Find(String ID[], int N) { String Id=NULL; int Times, i; for(i = Times = 0; i < N; i++) { if(Times == 0) //如果帖子重复度不高,就会等于0.就将Id赋给最

网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档

小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心:通过该项目,我们对业务流程有一个整体把控.对继承和多态有深入的了解 下面是类图: 主界面图: 核心思路: 1   1.首先在频道管理类ChannelManager中写一个加载所有频道方法LoadAllChannel; 2   3        该方法作用读取FullChannels.xml文件,并且

05 继承

继承与相等测试 (objectA instanceof Class) 返回 boolean 对象相等( 堆内存中) aObject.equals(bObject) 以上两个方法属于 Object 类, 所以所有的类都可以使用. 反射 反射库提供了一个非常丰富且精心设计的工具集, 以便编写能够动态操作java代码的程序, 这项功能被大量的应用于javabeans中. 能够分析类能力的程序被称为反射(reflective) java 反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有