奥鹏易百

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

帮助中心知识拓展客服QQ 515224986
查看: 555|回复: 0

大工20秋《java程序设计》辅导资料六

[复制链接]

1万

主题

5

回帖

2万

积分

论坛元老

积分
28878
发表于 2021-3-7 15:05:31 | 显示全部楼层 |阅读模式
扫码加微信
Java程序设计辅导资料六主    题:第三章 Java的多态性和抽象性(课件)
学习时间:2020年11月2日—11月8日       
“不忘初心、牢记使命”主题理论学习:
每周文摘:我们党要始终成为时代先锋、民族脊梁,始终成为马克思主义执政党,自身必须始终过硬。全党要更加自觉地坚定党性原则,勇于直面问题,敢于刮骨疗毒,消除一切损害党的先进性和纯洁性的因素,清除一切侵蚀党的健康肌体的病毒,不断增强党的政治领导力、思想引领力、群众组织力、社会号召力,确保我们党永葆旺盛生命力和强大战斗力。
摘选自《决胜全面建成小康社会,夺取新时代中国特色社会主义伟大胜利》
内    容:
我们这周主要学习《Java程序设计》这门课程的第3章最后一部分关于Java多态性和抽象性方面的介绍以及依次相关内容。希望通过下面的内容能使同学们对面向对象程序设计语言的整体特性有进一步的了解。
知识要点:
多态的概念
super的作用
编译时多态和运行时多态
类的抽象性
抽象类
最终类
重点难点:
super的作用
编译时多态和运行时多态
抽象类
最终类
类的多态性
在程序设计语言中,多态性是指“一种定义,多种实现”。例如,运算符“+”有多种含义,究竟执行哪种运算取决于参加运算的操作数个数及数据类型。
多态性是面向对象的核心特征之一,主要有方法的多态和类型的多态。方法的多态包括方法的重载和覆盖,为一种功能提供多种实现;类型的多态表现为,子类是一种父类型。
子类重定义从父类继承来的成员
当子类从父类继承来的成员不能满足子类需要时,子类不能删除它们,但可以重新定义它们,扩充父类成员方法的功能,使父类成员能够适应子类新的需求。
子类重新定义父类成员包括:重新定义父类的成员变量,则隐藏父类的成员变量;重定义父类的成员方法,如果参数列表相同则覆盖父类的成员方法,否则重载。
子类重定义父类成员表现出多态性,父类对象引用父类成员,子类对象引用子类成员。重定义的同名成员之间不会产生冲突和混乱,在子类的成员方法中,如果需要引用被子类隐藏或覆盖的父类同名成员,可使用super引用,语法格式如下:
super.成员变量
super.成员方法([参数列表])
类型的多态
子类通过继承方式扩充和发展了它的父类,继承约定了子类与父类之间存在的isA关系,子类是父类的一种特殊类型。
isA关系与hasA关系不同,hasA关系表示一个对象使用另一个对象来存储自身的状态。
子类对象即是父类对象
子类对象包含了父类的所有成员变量,isA关系表现为继承具有“即是”性质:子类对象即是父类对象。反之不然,父类对象不是它的子类对象。
使用对象运算符instanceof可以判断一个对象是都属于指定类及其子类,例如:
new Person() instanceof Preson           //结果是true
new Student() instanceof Person          //结果是true,子类对象即父类对象
new Person() instanceof Student          //结果是false,父类对象不是子类对象
父类对象引用子类实例
子类对象即是父类对象,表现为父类与子类之间具有赋值相容性,即父类对象能够引用子类实例,反之不行。例如:
Person p=new Student();          //赋值相容,子类对象即是父类对象
Strudent s=new Person();         //语法错,赋值不相容,父类对象不是子类对象
再扩展到Object类,由于所有类都是Object的子类,所以,一个Object对象能够引用任何类的实例。
3、编译时多态和运行时多态
根据何时确定执行多态方法中的哪一个,多态分为两种情况:编译时多态和运行时多态。如果在编译时能够确定执行多态方法中的哪一个,称为编译时多态;否则称为运行时多态。
编译时多态
方法重载都是编译时多态。根据实际参数的数据类型、个数和次序,Java编译时能够确定重载方法中的哪一个。
方法覆盖表现出两种多态性,当对象引用本类实例时,为编译时多态,否则为运行时多态。
运行时多态
以下声明父类对象p2引用子类实例:
Person p2=new Student(“张小莉”,new MyDate(1989,1,5));
System.out.println(“p2:”+p2.toString());
p2.toString()究竟执行谁的toString()方法?从编译角度看,p2声明为Person对象,而Person类声明了toString()方法,所以p2.toString()执行Person类的toString()方法,没有编译错误。
Java支持运行时多态,意为p2.toString()实际执行p2所引用实例的toString()方法。究竟是Person类或Student类的方法,运行时再决定。如果Student类声明toString()方法,则执行之;否则,执行Person类的toString()方法。
多态的方法实现
多态的toString()方法
Object类的toString()方法声明如下,它返回由当前对象所属类名和十六进制的哈希码组成的描述对象信息的字符串:
public String toString()
{
Return getClass().getName()+"@"+Integer.toHexString(hashCode());
}
一个类如果没有声明toString()方法,它将执行父类的toString()方法,如果父类没有声明toString()方法,再向其祖先类追溯,直至Object类。显然,Object类的toString()方法对当前对象的描述,不能满足其各个子类的个性要求。所以,一个类需要声明自己的toString()方法,覆盖Object类的toString()方法。
类的抽象性
1、用继承刻画包含关系
我们先看如图6-1所示的多种图形间的包含继承关系。
图6-1 多种图形间的包含关系
面向对象程序设计,用类表示一种具体的图形,如矩形类、椭圆类等,而多个概念间的包含关系用类的继承关系来刻画,因为子类是一种父类类型。声明“抽象类”来描述图形、开放图形和闭合图形等抽象概念。因此,建立各种图形类并表达其间关系如下:
·声明“图形抽象类”,约定抽象图形概念中的属性和行为,抽象类没有实例,就像画不出一种没有具体形状的图形一样。
·声明“闭合图形抽象类”继承“图形抽象类”,增加计算周长和面积方法等。
·声明椭圆类继承闭合图形抽象类,增加椭圆的半径属性,实现计算椭圆的周长和面积等功能。
·声明矩形类继承闭合图形抽象类,增加矩形的长度、宽度属性,实现计算矩形的周长和面积等功能。
2、抽象类
当定义一个类时,可以声明类的继承特性,即声明一个类是否为抽象类或最终类。
声明抽象和抽象方法
使用关键字abstract声明的类称为抽象类,使用abstract声明的成员方法称为抽象方法,抽象方法只有方法声明没有方法体。抽象类通常包含抽象方法。
抽象类的特点
一个抽象类可以不包含抽象方法,但是包含抽象方法的类必须被声明为抽象类。构造方法、静态成员方法不能被声明为抽象方法。
一个非抽象类必须实现从父类继承来的所有抽象方法,如果不能实现父类的所有抽象方法,则该类必须声明为抽象类。
由于抽象方法在抽象类中没有具体的方法实现,所以抽象类不能被实例化,不能创建抽象类的实例。
抽象类与抽象方法的作用
既然抽象类不能创建实例,而且抽象类方法没有具体实现,那么他们的作用何在呢?
抽象类用于描述抽象概念,其中声明的抽象方法为多个子类约定方法声明,每个子类可以根据自身的实际情况,给出抽象方法的具体实现,显然不同的子类可以有不同的方法实现。因此,一个抽象方法在多个子类中表现出多态性。抽象方法提供方法声明与方法实现的分离机制,使抽象类的多个子类能够表现出共同的行为能力。
最终类
声明最终类
最终类不能被继承,即不能声明最终类的子类。使用关键字final声明最终类。
如果不希望一个类被继承,则声明该类为最终类。类声明时,习惯上将public放在final前面。
注意:抽象类不能被声明为最终类。
声明最终方法
最终方法不能被子类覆盖。使用final声明成员方法为最终方法。
最终类中包含的都是最终方法。非最终类也可以包含最终方法。例题
一、填空题
1、在类成员方法中,如果需要引用被子类隐藏或覆盖的父类同名成员,可使用()。
二、判断题
1、子类重新定义父类的成员方法,如果参数列表相同,则叫做覆盖。()
2、父类对象可以引用子类实例,子类对象也可以引用父类实例。()
3、方法的重载都是编译时多态。()
4、包含抽象方法的类必须声明为抽象类,但抽象类可以不包含抽象方法。()
三、多项选择题
1、下列叙述正确的是()。
A. 抽象类不能被声明为抽象类
B.最终方法同样可以被子类覆盖
C. 非最终类不能包含最终方法
D.抽象类不可以进行实例化
四、简答题
1、指出下列语句的错误之处。
public final class Math extends Object
public class MyMath extends Math例题答案
一、填空题
super引用
二、判断题
正确
错误
正确
正确
三、多项选择题
AD
四、简答题
第一句中Math被声明为最终类,最终类不可以被继承,座椅第二句中的继承关系式错误的。
本内容由易百教育整理发布
网址www.openhelp100.com
QQ 515224986
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|www.openhelp100.com ( 冀ICP备19026749号-1 )

GMT+8, 2024-12-27 01:46

Powered by openhelp100 X3.5

Copyright © 2001-2024 5u.studio.

快速回复 返回顶部 返回列表