收藏 分销(赏)

实验9 继承与多态(抽象类和接口).doc

上传人:s4****5z 文档编号:8754467 上传时间:2025-03-01 格式:DOC 页数:4 大小:629KB 下载积分:10 金币
下载 相关 举报
实验9 继承与多态(抽象类和接口).doc_第1页
第1页 / 共4页
实验9 继承与多态(抽象类和接口).doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
实验9 继承与多态 一、实验目的 (1) 理解类的继承,掌握变量隐藏、方法覆盖的概念。 (2)理解引用类型的变量的赋值转换原则。 (3)理解多态概念,掌握方法的匹配调用原则;   (4)理解抽象类的使用; (5)理解this和super的含义及使用。 (6)理解访问控制符的使用 二、 知识要点 1、继承的概念 通过类的继承,祖先类的所有成员均将成为子类拥有的“财富”。但是能否通过子类对象直接访问这些成员则取决于访问权限设置。Object类是所有类的祖先。 2、构造方法与继承关系 构造方法不存在继承关系,子类中是如何给父类继承的属性赋初值呢? 子类通过调用父类的构造方法给父类的属性赋值,在子类的构造方法的第1行可以通过super去调用父类的构造方法,如果没有super调用,则默认调用父类的无参构造方法。所以,在父类中编写构造方法通常均要提供无参构造方法。 3、对象引用变量赋值原则 可以将子类的对象引用赋值给父类引用变量,由于父类能操作访问属性和方法的子类已全部继承。但将父类引用变量的值赋给子类引用变量就受到限制,必须进行强制转换,编译总是认可强制转换,但运行程序时如果不能正确转换就会报错。 4、多态的两种表现形式 (1) 同一类中的方法多态(方法重载):同一类中允许多个同名方法,通过参数的数量、类型的差异进行区分。 (2) 子类对父类方法的重新定义(方法覆盖):方法名、返回值和参数形态完全一样。 (3) 方法调用的匹配原则。 首先查找有否有参数一致的方法,也就是精确匹配;如果没有,再检查实参是否能自动转换为形参类型,能转换也可以匹配调用,这种匹配称为转换匹配。 5、继承关系中对成员的访问(最近匹配原则)     由于继承关系的存在,一个对象的属性和方法中有自己新定义的,也有从祖先类继承的。允许子类对父类定义的属性和方法重新定义,一个对象查找其属性和方法时按什么原则查找呢,实际也是“最近匹配原则”。 (1)在子类中访问属性和方法时将优先查找自己定义的属性和方法。如果该成员在本类存在,则使用本类的,否则,按照继承层次的顺序到其祖先类查找,如图8-1所示。 (2)this关键字特指本类的对象引用,使用this访问成员则首先在本类中查找,如果没有,则到父类逐层向上找。 (3)super特指访问父类的成员,使用super首先到直接父类查找匹配成员,如果未找到,再逐层向上到祖先类查找。   6、抽象类 定义形式: abstract class 类名称 {     成员变量;     方法(){……}     //定义一般方法     abstract 方法();//定义抽象方法 }   l  在抽象类中可以包含一般方法和抽象方法。 l  抽象类表示的是一个抽象概念,不能被实例化为对象。 l  继承抽象类的具体类必须将抽象类中抽象方法覆盖实现。 7、接口 定义形式: interface 名称 {     静态常量;     抽象方法();     }   l  接口中包含静态常量和抽象方法. l  类继承接口,实现接口中的所有方法. 三、上机练习 1. 编写程序,在程序中定义一个抽象类Area、两个Area类的派生子类RectArea和RoundArea类,以及一个实现类ImpleArea类(main方法所在的类).程序的实现如下: (1) 抽象类Area类中只包含一个抽象方法:double area()。 (2) 子类RoundArea类通过覆盖父类中的抽象方法area来求圆的面积,另一个类RectArea类通过覆盖父类中的抽象方法area求长方形的面积 (3) 圆的半径和长方形的边分别定义为子类RoundArea类和RectArea类的域,都为double类型。 (4) ImpleArea类中接收键盘输入(Scanner),输入内容分别为长方形的边和圆的半径,求出长方形和圆的面积,并在屏幕上显示。 2. 某公司有 3种不同的雇员,分为A,B,C3个级别。公司的总雇员数目因月份的不同可能发生变化。每个级别的月薪是不同的。编写一个程序计算公司一个月需要支付的全部薪水。 要求有一个abstract类,类名为Employee。Employee的子类有Aemployee, Bemployee, Cemployee. Employee类必须有一个abstract方法 注意:Aemployee, Bemployee, Cemployee声明的对象表示的是一个员工,而不是一类员工。成员变量没有要求的,不能乱加。 public abstract double earnings();//返回级别工资 子类必须重写父类的earnings方法(必须的,继承抽象类必须实现抽象方法),给出各自的月薪水的具体数额。 (数据随便,自己编好了) 编写一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是Aemployee, Bemployee, Cemployee的子类对象。Company类提供计算月薪总和的方法,使得程序能输出Company对象需要支付的月薪总额。 编写一个类,来检验该Company. 要求不同等级员工的人数由用户来决定(使用Scanner类)。根据人数,来求出该月公司支付月薪对象 程序效果如图: 3.火车要装载一批货物和乘客,货物由3种商品:电视、计算机和洗衣机组成。火车需要计算出所装载的货物和乘客的总重量。 要求:有一个SetAndGetWeight接口,该接口中有2个方法: public double getWeight(); public void setWeight(double weight); 有四个实现该接口的类:Television、Computer、WashMachine、People类。这四个类通过实现接口设置各对象的自重和获取对象的自重。 有一个Train类,该类用SetAndGetWeight接口类型的数组作为成员,那么该数组的单元就可以存放Television、Computer、WashMachine、People对象的引用。程序能输出Train对象所装载的货物和乘客的总重量。 程序的效果图如下: 注:上交2,3两题
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服