第5章 C# 中的继承_第1页
第5章 C# 中的继承_第2页
第5章 C# 中的继承_第3页
第5章 C# 中的继承_第4页
第5章 C# 中的继承_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章C# 中的继承 2回顾类是 C# 中的一种结构,用于在程序中模拟现实生活的对象成员变量表示对象的特征方法表示对象可执行的操作如果类中未定义构造函数,则由运行库提供默认构造函数析构函数不能重载,并且每个类只能有一个析构函数可以根据不同数量的参数或不同数据类型参数对方法进行重载,不能根据返回值进行方法重载命名空间用来界定类所属的范围,类似于Java中的包3目标理解继承在C# 中使用继承在C#中使用接口在C#中使用方法的重写4继承 2-1Class Base / 成员变量 int basevar; / 成员函数 Base_fun1() / 定义 . .Class Derived : Base

2、/ 成员变量 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 / 成员变量 / 成员函数 private Barking() / 定义 pr

3、ivate Wagging_Tail() 派生类6继承 C# 中的类 public class Graduate: Student, Employee / 成员变量 / 成员函数 多重继承 允许多重接口实现X7演示public class Student:Person private string _school; private uint _eng; private uint _math; private uint _sci; public void GetMarks() Console.WriteLine(“请输入学校名称);_school = Console.ReadLine();Con

4、sole.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 _age; public void GetInfo() Console.WriteLine(请输

5、入您的姓名和年龄); _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.DispInfo(); objStudent.GetMarks();调用的基类成员无法实现 GetIn

6、fo() 和 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(尊敬的 0,您的年龄为 1, _name, _age); public class Student:Person

7、 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(Console.ReadLine();_math = uint.Parse(Console.ReadLine();_s

8、ci = 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)Console.WriteLine(合格);elseConsole.WriteLine(“不合格); 派生类public static v

9、oid Main(string args) UnderGraduate objUnderGraduate = new UnderGraduate(); objUnderGraduate.GetInfo(); objUnderGraduate.DispInfo(); objUnderGraduate.ChkEgbl();9用于从派生类中访问基类成员 可以使用 base 关键字调用基类的构造函数 关键字 base10调用 base 构造函数 public class Student:Personprivate uint id; /调用 Person 构造函数 public Student(stri

10、ng 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 = name;this._age = age;Console.WriteLine(_name);Console.WriteLine(_age); public class S

11、tudent: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 = new Student(XYZ, 45, 001);12关键字 overrideClass Base / 成员变量 int basevar; / 成员函数 GetInfo() /

12、定义 . .Class Derived : Base / 成员变量 int derivedvars; / 成员函数 override GetInfo() / 定义 . .基类派生类base 方法的新实现13关键字 virtual Access modifier virtual return type name ( parameters-list ) . / Virtual 方法实现 .public virtual void Func()Console.WriteLine(“这是 virtual 方法,可以被重写);14/将执行派生类的变量/要求 new 访问修饰符将输出派生类中的 val相同字

13、段new隐藏继承成员关键字 new15class Employee public virtual void EmpInfo() Console.WriteLine(“此方法显示职员信息); class DervEmployee: Employee public override void EmpInfo() base.EmpInfo();Console.WriteLine(“此方法重写 base 方法); static void Main(string args) DervEmployee objDervEmployee = new DervEmployee(); objDervEmploye

14、e.EmpInfo(); Employee objEmployee = objDervEmployee; objEmployee.EmpInfo();16抽象类和抽象方法 2-1 abstract class ClassOne /类实现访问修饰符派生类的基类不能实例化17abstract class Base / 成员变量 int basevar; / 成员函数abstract void base_fun1(parameters); / 无法实现 .抽象方法class Derived : Base / 成员变量 int derivedvars; / 成员函数override void Base

15、_fun1(parameters) / 实际实现 .抽象类派生类提供重写方法原型必须重写 抽象类和抽象方法 2-2 18演示using System;namespace Example_5abstract class ABCpublic abstract void AFunc();public void BFunc()Console.WriteLine(“这是一个非抽象方法!);class Derv : ABCpublic override void AFunc() Console.WriteLine(“这是一个抽象方法! ); 抽象类 不能实例化派生类 重写方法static void Mai

16、n(string args) Derv objB = new Derv(); objB.AFunc(); objB.BFunc();19abstract class MyAbs public abstract void AbMethod();/派生类class MyClass : MyAbspublic override void AbMethod() Console.WriteLine(“在 MyClass 中实现的抽象方法);/派生自 MyClass 的子类class SubMyClass:MyClasspublic void General() /未实现 AbMethod 抽象方法 Co

17、nsole.WriteLine(在 SubMyClass 中未实现的抽象方法 );static void Main(string args) SubMyClass objSubClass = new SubMyClass(); objSubClass.General();20接口 4-1OFFON请按开关按钮:ON/OFF两种方法ONOFF21接口 4-2OFFONISwitchON()OFF()22接口 4-3 class IBase void method1();int method2();int method3(float);/没有实现 .接口interface只有方法声明没有实现23p

18、ublic interface IPictint DeleteImage();void DisplayImage();隐式声明为 public无访问修饰符示例中的 IPict 接口用于演示接口接口 4-424演示public class MyImages : IPict /第一个方法的实现 public int DeleteImage() Console.WriteLine(“DeleteImage 实现!);return(5); /第二个方法的实现 public void DisplayImage() Console.WriteLine(DisplayImage 实现!); static v

19、oid Main(string args) MyImages objM = new MyImages(); objM.DisplayImage(); int t = objM.DeleteImage(); Console.WriteLine(t);派生自 IPict 接口25演示:示例 10public interface IPictint DeleteImage();void DisplayImage();public class MyImages : BaseIO, IPict public int DeleteImage() Console.WriteLine(“DeleteImage

20、实现!); return(5); public void DisplayImage() Console.WriteLine(“DisplayImage 实现!); public class BaseIO 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.

21、Open();26多重接口实现C# 不允许多重类继承但 C# 允许多重接口实现 这意味着一个类可以实现多个接口 27演示:示例 11public interface IPictManip void ApplyAlpha();/第二个接口public interface IPictint DeleteImage();void DisplayImage();public class BaseIO public void Open() Console.WriteLine(“BaseIO 的 Open 方法); static void Main(string args) MyImages objM =

22、 new MyImages(); objM.DisplayImage(); objM.DeleteImage(); objM.Open(); objM.ApplyAlpha();28显式接口实现在 C# 中,只要不发生命名冲突,就完全可以允许多重接口实现public interface IPictManip void ApplyAlpha();public interface IPict void ApplyAlpha();public class MyImages : BaseIO, IPict, IPictManippublic int ApplyAlpha().?使用显式接口实现29演示

23、:示例 12public class MyImages : BaseIO, IPict, IPictManip public int DeleteImage() Console.WriteLine(“DeleteImage 实现!);return(5); public void ApplyAlpha() Console.WriteLine(“ApplyAlpha 实现!); void IPict.DisplayImage() Console.WriteLine(“DisplayImage 的 IPict 实现); void IPictManip.DisplayImage() Console.W

24、riteLine(“DisplayImage 的 IPictManip 实现); 显式接口实现static void Main(string args)MyImages objM = new MyImages();IPict Pict = objM; /IPict 引用Pict.DisplayImage();IPictManip PictManip = objM; /IPictManip 引用PictManip.DisplayImage();30演示:示例 13public interface IPict int DeleteImage();public interface IPictManip

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论