版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章,C# 中的继承,2,回顾,类是 C# 中的一种结构,用于在程序中模拟现实生活的对象 成员变量表示对象的特征 方法表示对象可执行的操作 如果类中未定义构造函数,则由运行库提供默认构造函数 析构函数不能重载,并且每个类只能有一个析构函数 可以根据不同数量的参数或不同数据类型参数对方法进行重载,不能根据返回值进行方法重载 命名空间用来界定类所属的范围,类似于Java中的包,3,目标,理解继承 在C# 中使用继承 在C#中使用接口 在C#中使用方法的重写,4,继承 2-1,Class Base / 成员变量 int basevar; / 成员函数 Base_fun1() / 定义 . .,Cl
2、ass Derived : Base / 成员变量 int derivedvars; / 成员函数 Derived_fun1() / 定义 . .,基类,void main() Derived dr_obj = new Derived() ; dr_obj.Base_fun1(); ,无需重新编写代码,派生类,5,狗,马,继承 2-2,动物,基类,派生类,继承的层次结构示例,Class Animal / 成员变量 int eyes, nose; Animal() eyes = 2; nose = 1; Pet_Animal() / 定义 ,基类,Class Dog : Animal / 成员变
3、量 / 成员函数 private Barking() / 定义 private Wagging_Tail() ,派生类,6,继承 C# 中的类,public class Graduate: Student, Employee / 成员变量 / 成员函数 ,多重继承,允许多重接口实现,7,演示,public class Student:Person private string _school; private uint _eng; private uint _math; private uint _sci; public void GetMarks() Console.WriteLine(“请
4、输入学校名称); _school = Console.ReadLine(); Console.WriteLine(请分别输入英语、数学和自然科学的分数。); _eng = uint.Parse(Console.ReadLine(); _math = uint.Parse(Console.ReadLine(); _sci = uint.Parse(Console.ReadLine(); Console.WriteLine(“所得总分为:0,_eng+_math+_sci); ,派生类,public class Person private string _name; private uint _
5、age; public void GetInfo() Console.WriteLine(请输入您的姓名和年龄); _name = Console.ReadLine(); _age = uint.Parse(Console.ReadLine(); public void DispInfo() Console.WriteLine(尊敬的 0,您的年龄为 1 , _name, _age); ,基类,static void Main(string args) Student objStudent = new Student(); objStudent.GetInfo(); objStudent.Di
6、spInfo(); objStudent.GetMarks(); ,调用的基类成员,无法实现 GetInfo() 和 DispInfo() 方法,8,演示,public class Person private string _name; private uint _age; public void GetInfo() Console.WriteLine(请输入您的姓名和年龄); _name = Console.ReadLine(); _age = uint.Parse(Console.ReadLine(); public void DispInfo() Console.WriteLine(尊
7、敬的 0,您的年龄为 1, _name, _age); ,public class Student:Person private string _school; private uint _eng; private uint _math; private uint _sci; private uint _tot; public uint GetMarks() Console.WriteLine(“请输入学校名称); _school = Console.ReadLine(); Console.WriteLine(请分别输入英语、数学和自然科学的分数。 ); _eng = uint.Parse(C
8、onsole.ReadLine(); _math = uint.Parse(Console.ReadLine(); _sci = uint.Parse(Console.ReadLine(); _tot = _eng + _math + _sci; Console.WriteLine(所得总分为:0 ,_tot); return _tot; ,基类,派生类,public class UnderGraduate:Student public void ChkEgbl() Console.WriteLine(要上升一级,要求总分不低于 150 ); if(this.GetMarks() 149) C
9、onsole.WriteLine(合格); else Console.WriteLine(“不合格); ,派生类,public static void Main(string args) UnderGraduate objUnderGraduate = new UnderGraduate(); objUnderGraduate.GetInfo(); objUnderGraduate.DispInfo(); objUnderGraduate.ChkEgbl(); ,9,用于从派生类中访问基类成员 可以使用 base 关键字调用基类的构造函数,关键字 base,10,调用 base 构造函数,pu
10、blic class Student:Person private uint id; /调用 Person 构造函数 public Student(string name,uint age,uint id):base(name,age) this.id = id; Console.WriteLine(id); ,:base 关键字将调用 Person 类构造函数,11,演示,public class Person public string _name; public uint _age; public Person(string name, uint age) this._name = na
11、me; this._age = age; Console.WriteLine(_name); Console.WriteLine(_age); ,public class Student:Person private uint _id; public Student(string name, uint age, uint id):base(name, age) this._id = id; Console.WriteLine(_id); ,还将调用 Base 构造函数,static void Main(string args) /构造 Student Student objStudent =
12、new Student(XYZ, 45, 001); ,12,关键字 override,Class Base / 成员变量 int basevar; / 成员函数 GetInfo() / 定义 . .,Class Derived : Base / 成员变量 int derivedvars; / 成员函数 override GetInfo() / 定义 . .,基类,派生类,base 方法的新实现,13,关键字 virtual,Access modifier virtual return type name ( parameters-list ) . / Virtual 方法实现 . ,publ
13、ic virtual void Func() Console.WriteLine(“这是 virtual 方法,可以被重写); ,14,/将执行派生类的变量,/要求 new 访问修饰符,将输出派生类中的 val,相同字段,new,隐藏继承成员,关键字 new,15,class Employee public virtual void EmpInfo() Console.WriteLine(“此方法显示职员信息); ,class DervEmployee: Employee public override void EmpInfo() base.EmpInfo(); Console.WriteL
14、ine(“此方法重写 base 方法); ,static void Main(string args) DervEmployee objDervEmployee = new DervEmployee(); objDervEmployee.EmpInfo(); Employee objEmployee = objDervEmployee; objEmployee.EmpInfo(); ,16,抽象类和抽象方法 2-1,abstract class ClassOne /类实现 ,访问修饰符,派生类的基类,不能实例化,17,abstract class Base / 成员变量 int basevar
15、; / 成员函数 abstract void base_fun1(parameters); / 无法实现 . ,抽象方法,class Derived : Base / 成员变量 int derivedvars; / 成员函数 override void Base_fun1(parameters) / 实际实现 . ,抽象类,派生类,提供,重写方法,原型,必须重写,抽象类和抽象方法 2-2,18,演示,using System; namespace Example_5 abstract class ABC public abstract void AFunc(); public void BFu
16、nc() Console.WriteLine(“这是一个非抽象方法!); class Derv : ABC public override void AFunc() Console.WriteLine(“这是一个抽象方法! ); ,抽象类 不能实例化,派生类 重写方法,static void Main(string args) Derv objB = new Derv(); objB.AFunc(); objB.BFunc(); ,19,abstract class MyAbs public abstract void AbMethod(); /派生类 class MyClass : MyAb
17、s public override void AbMethod() Console.WriteLine(“在 MyClass 中实现的抽象方法); /派生自 MyClass 的子类 class SubMyClass:MyClass public void General() /未实现 AbMethod 抽象方法 Console.WriteLine(在 SubMyClass 中未实现的抽象方法 ); ,static void Main(string args) SubMyClass objSubClass = new SubMyClass(); objSubClass.General(); ,2
18、0,接口 4-1,OFF,ON,请按开关按钮:ON/OFF,两种方法 ON OFF,21,接口 4-2,ISwitch ON() OFF(),22,接口 4-3,class IBase void method1(); int method2(); int method3(float); /没有实现 . ,接口,interface,只有方法声明,没有实现,23,public interface IPict int DeleteImage(); void DisplayImage(); ,隐式声明为 public,无访问修饰符,示例中的 IPict 接口用于演示接口,接口 4-4,24,演示,pu
19、blic class MyImages : IPict /第一个方法的实现 public int DeleteImage() Console.WriteLine(“DeleteImage 实现!); return(5); /第二个方法的实现 public void DisplayImage() Console.WriteLine(DisplayImage 实现!); ,static void Main(string args) MyImages objM = new MyImages(); objM.DisplayImage(); int t = objM.DeleteImage(); Con
20、sole.WriteLine(t); ,派生自 IPict 接口,25,演示:示例 10,public interface IPict int DeleteImage(); void DisplayImage(); public class MyImages : BaseIO, IPict public int DeleteImage() Console.WriteLine(“DeleteImage 实现!); return(5); public void DisplayImage() Console.WriteLine(“DisplayImage 实现!); ,public class Ba
21、seIO public void Open() Console.WriteLine(BaseIO 的 Open 方法); ,static void Main(string args) MyImages objM = new MyImages(); objM.DisplayImage(); int val = objM.DeleteImage(); Console.WriteLine(val); objM.Open(); ,26,多重接口实现,C# 不允许多重类继承 但 C# 允许多重接口实现 这意味着一个类可以实现多个接口,27,演示:示例 11,public interface IPictM
22、anip void ApplyAlpha(); /第二个接口 public interface IPict int DeleteImage(); void DisplayImage(); public class BaseIO public void Open() Console.WriteLine(“BaseIO 的 Open 方法); ,static void Main(string args) MyImages objM = new MyImages(); objM.DisplayImage(); objM.DeleteImage(); objM.Open(); objM.ApplyAl
23、pha(); ,28,显式接口实现,在 C# 中,只要不发生命名冲突,就完全可以允许多重接口实现,public interface IPictManip void ApplyAlpha(); ,public interface IPict void ApplyAlpha(); ,public class MyImages : BaseIO, IPict, IPictManip public int ApplyAlpha() . . ,?,使用显式接口实现,29,演示:示例 12,public class MyImages : BaseIO, IPict, IPictManip public i
24、nt DeleteImage() Console.WriteLine(“DeleteImage 实现!); return(5); public void ApplyAlpha() Console.WriteLine(“ApplyAlpha 实现!); void IPict.DisplayImage() Console.WriteLine(“DisplayImage 的 IPict 实现); void IPictManip.DisplayImage() Console.WriteLine(“DisplayImage 的 IPictManip 实现); ,显式接口实现,static void Main(string args) MyImages objM = new MyImages(); IPict Pict = objM; /IPict 引用 Pict.DisplayImage(); IPictManip PictManip = objM; /IPictManip 引用 PictManip.DisplayImage(); ,30,演示:示例 13,public interface IPict int DeleteImage(); public interf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年煤矿钻探工安全培训手册
- 2026年大学生体育锻炼情况调查
- 2026年幼儿园冬季传染病预防家长信
- 2026年新高考地理区域认知力提升方法
- 2026年高校图书馆员年度读者服务总结
- 2026年幼儿园周界报警系统维护
- 2026年民营医院核心岗位胜任力模型构建与应用
- 2026年学校卫生保健所年度学生健康监测工作总结
- 2026湖南机场集团招聘40人笔试历年参考题库附带答案详解
- 2026湖北十堰市房县风雅演艺有限公司演职人员招聘笔试笔试历年参考题库附带答案详解
- 2026科技日报社招聘应届高校毕业生7人考试备考试题及答案解析
- 广西能汇投资集团有限公司招聘笔试题库2026
- 监理安全管理制度和预案(3篇)
- 2026校招:华泰证券笔试题及答案
- 2026年1月浙江省高考(首考)化学试题(含标准答案)
- 小学生科学竞赛模拟试卷
- 2026年外事办公室俄语翻译面试易错题集及答案深度解析
- 2026年水利工程质量检测员网上继续教育考试题库200道含答案(基础题)
- 绿色科技赋能农业
- 2026年宜宾人才发展集团有限公司招聘备考题库及参考答案详解1套
- 2026云南省烟草专卖局(公司)高校毕业生招聘497人(第二批)易考易错模拟试题(共500题)试卷后附参考答案
评论
0/150
提交评论