- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验实验目的
实验要求:
实验步骤
上例中,x_pub是public公共成员,可以自由访问,是“暴露在外”的成员。访问没有任何限制。
x_prot是protected保护成员,可以在本类成员和子类成员中访问。但不能从其它类访问。
x_pri是私有成员,只能在本类成员中访问,限制最大
根据访问属性,判断上述程序中哪些语句调用是合法的?
练习1:
指出上述类中,有哪些成员?其中,哪些成员可以在类外部直接访问,哪些成员可以在子类访问,哪些成员只能在本类中访问?
2 在子类中对方法进行重定义
父类中已经定义的方法,在子类中可以进行重新定义:
在上述程序中,父类Person定义了方法Hi(),在子类中也定义了同名同参数的方法Hi()。
一般上,对象能够容易地确定调用哪个版本的方法。
练习2 判断上述程序中,p和s分别调用了哪个版本的方法Hi()?
3 子类引用可以赋值给父类引用变量。
C#中规定,子类引用可以赋值给父类引用变量
例:如果B是A的子类,则A a1; // a1是类A的引用变量
a1 = new B(); // 该语句是合法的。前提是B是A的子类
假如父子类中都定义了相同名字(包括参数类型)的方法,当我们通过引用来调用方法时,C#如何确定到底调用哪个版本的方法呢?
例:
默认情况下,如果通过对象引用调用方法,会根据对象定义时的类型决定调用的方法的版本:
上例中,因为变量p的定义类型为Person,实际引用的对象是Student类型。所以调用p.Hi()时,调用的是类Person中的Hi()方法。
4 使用虚方法实现多态
很多情况下,我们希望能够调用引用变量实际引用的对象的方法版本,需要使用“虚函数”。使用虚函数,需要在父类定义中,在方法前加上virtual 关键字,并在子类的相应方法中,添加override关键字:
上例中,采用了虚函数,所以会根据p所引用的实际的对象类型决定调用的版本。因为p引用的实际类型是Student,所以调用的是Student类中的Hi()方法。
练习3:
以下程序1和程序2的输出结果是什么?比较一下有什么不同?
4 使用New关键字实现多态以及使用抽象方法实现多态
练习4 : 将练习3中的程序1用new关键字隐藏父类方法以及抽象方法两种方式,进行改写,来实现多态。
练习5:类的多态性实验综合编程
设计雇员系统的类库,定义雇员(Employee)基类,共同的属性,姓名、地址和出生日期,子类:程序员(Processor),秘书(Secretary),高层管理(Master),清洁工(Cleaner),他们有不同的工资算法:
(1)其中高级主管和程序员采用底薪加提成的方式,高级主管和程序员的底薪分别是5000元和2000元, 提成百分比按照当月的项目完成情况设置(提示:提成百分比作为方法形参)。
(2)秘书和清洁工采用固定工资的方式,工资分别是3000和1000
请以多态的方式处理程序,实现雇员系统的类库中的各成员工资的计算。
练习6:接口的应用与理解
完成课本P173页的例8.12 ,利用接口的继承实现模拟银行存取款。
using System;
class Person
{
public int x_pub = 10;
private int x_pri = 20;
protected int x_prot = 30;
public void f1()
{
// 在定义成员的同一个类内,可以访问public, protected, privated成员
Console.WriteLine(x_pub);
Console.WriteLine(x_pri);
Console.WriteLine(x_prot);
}
}
class Student : Person
{
public void f2()
{
// 在子类成员中,可以访问public, protected成员,但不能访问privated成员
Console.WriteLine(x_pub);
// Console.WriteLine(x_pri); // 子类中不能访问父类定义的private成员
Console.WriteLine(x_prot);
}
}
class Test
{
public static void Main()
您可能关注的文档
- 实验二吸虫要点.ppt
- 输尿管及比邻断层要点.ppt
- 实验二液泡系和线粒体的活体染色及观察要点.ppt
- 实验二植物组织一、实验目的1、了解组成植物体的常见…要点.ppt
- 输尿管内异病例分享要点.ppt
- 实验二中药炮制技术要点.ppt
- 输气管第四章输气管的水力计算要点.ppt
- 实验法:审慎决策中的道德隐患要点.ppt
- 输送血液的泵—心脏要点.ppt
- 输血查对制度要点.ppt
- 小学科学:ESP8266智能插座电路原理与动手实践研究教学研究课题报告.docx
- 《金融开放浪潮下我国多层次监管体系构建与创新研究》教学研究课题报告.docx
- 区域教育质量监测中人工智能应用的数据质量分析与优化策略教学研究课题报告.docx
- 《金融科技监管中的数据治理与合规性要求》教学研究课题报告.docx
- 《3D打印技术在航空航天领域中的多材料制造与复合材料应用》教学研究课题报告.docx
- 《绿色金融发展中的政府职能与市场机制研究》教学研究课题报告.docx
- 《植物工厂多层立体栽培光环境调控技术对植物生长发育节律的调控机制探讨》教学研究课题报告.docx
- 销售团队年度业绩总结.docx
- 银行风险管理与金融危机防范.docx
- 银行网络攻击预警与快速响应机制.docx
文档评论(0)