黑马程序员---面向对象之接口2

发布时间:2016-12-6 16:11:41 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"黑马程序员---面向对象之接口2",主要涉及到黑马程序员---面向对象之接口2方面的内容,对于黑马程序员---面向对象之接口2感兴趣的同学可以参考一下。

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 博客园:http://www.cnblogs.com/piziyimao/archive/2013/01/28/2880625.html#_labelStart a、声明可以飞的接口 namespace 接口 { interface IFlyable {//接口命名规范 大写I开头 接口可以有访问修饰符 它和类一样 //public void Fly();//定义在接口中的方法不能有访问修饰符 void Fly();//默认隐式公开 默认Public 接口中成员不能有实现 //private string name;//接口中可以有方法 属性 索引器 但不能有字段 string Name { get;//可以有属性 但不能有实现 所以下面一个是错的 } //string Name { // get { // return null; // }//不能有实现 //} void Samename(); } } b、声明可以说话的接口 namespace 接口 { interface ISpeak { void Speak(); void Samename(); } } c、实现接口 using System; namespace 接口 { class Test : IFlyable {//实现接口 public void Fly() { Console.WriteLine("实现接口中未实现的成员" ); } public string Name { get { throw new NotImplementedException(); } } } } d、添加父类Bird.cs  namespace 接口 { class Bird { private string name; public string Name { get { return name; } set { name = value ; } } } } e、Test类实现接口并继承Bird类 using System; namespace 接口 { /// <summary> /// 实现接口 /// </summary> class Test : Bird , IFlyable { //IFlyable, Bird 继承的父类Bird必须在IFlyable接口前 public void Fly() { Console.WriteLine("实现接口中未实现的成员" ); } public string Name { get { throw new NotImplementedException(); } } void IFlyable .Samename() { throw new NotImplementedException(); } } } f、鹦鹉类继承Bird   实现IFlyable,ISpeak接口 using System; namespace 接口 { class Sparrow : Bird , IFlyable, ISpeak {//显示实现接口 当前类实现两个接口时 接口中存在同名的方法 此时需要显示实现 很少用 public void Fly() { throw new NotImplementedException(); } //鹦鹉不仅能飞还能说话 那必须添加Speak的接口 public void Speak() { Console.WriteLine("不能在IFlyable接口中定义Speak功能 而需另建Speak接口" ); } string IFlyable .Name { get { throw new NotImplementedException(); } } //显示实现接口时 方法名称前多了接口名称 void IFlyable .Samename() { throw new NotImplementedException(); } //IFlyable与ISpeak存在同名的Samename方法 void ISpeak .Samename() {//不可以添加Public访问修饰符 throw new NotImplementedException(); } } } g、接口的调用 namespace 接口 { class Program { static void Main(string[] args) { //接口可以看做是父类 不能new IFlyable(); //IFlyable fly = new Test(); IFlyable[] flys = {//作为父类一样使用 new Test (), new Sparrow () }; foreach(IFlyable item in flys) { //item.Fly(); item.Samename(); if(item is Sparrow) { var a = item as Sparrow; if(a != null ) { a.Speak(); //如果直接转换((Sparrow)item).Speak(); 值为null的话 会直接报错 //a.Samename();//当Sparrow类显示实现Samename时 就不能再通过对象.方法()调用 } } } } } } 接口练习   接口练习 //从学生,老师,校长类中抽象出人的类,学生和老师都有收作业的方法,但是校长不会收作业 a、新建Person父类 namespace 接口练习 { class Person { private string name; public string Name { get { return name; } set { name = value; } } private string sex; public string Sex { get { return sex; } set { sex = value; } } public Person() { } public Person(string name, string sex) { this.sex = sex; this.name = name; } } } b、新建交作业的接口 namespace 接口练习 { interface ICollectHomeWork { void CollectHomeWork(); } } c、新建老师类和学生类继承自Person类,实现ICollectHomeWork接口 using System; namespace 接口练习 { class Student : Person , ICollectHomeWork { public void CollectHomeWork() { Console.WriteLine("收作业" ); } public Student(string name, string sex) : base(name, sex) { } public Student() { } } } using System; namespace 接口练习 { class Teacher : Person , ICollectHomeWork { public Teacher() { } public void CollectHomeWork() { Console.WriteLine("该交作业了" ); } public Teacher(string name, string sex) : base(name, sex) { } } } d、新建校长类继承Person类 namespace 接口练习 { class SchoolMaster : Person { public SchoolMaster(string name, string sex) : base(name, sex) { } } } e、调用接口 namespace 接口练习 { class Program { static void Main(string[] args) { Collect( new Teacher ()); Create( "student").CollectHomeWork();//Create("student")就是接口的对象 } //将收作业定义成为方法 static void Collect(ICollectHomeWork homework) { //接口作为参数 homework.CollectHomeWork(); } static ICollectHomeWork Create(string type) { //接口作为返回值 ICollectHomeWork接口本身就是种数据类型 引用类型 ICollectHomeWork ico = null ; switch(type) { case "teacher" : ico = new Teacher (); break; case "student" : ico = new Student (); break; default: break; } return ico; } } }   总结: 接口   接口是定义类的一组标准和规范   接口的出现是为了解决类的单根继承性   接口不能被实例化   可以同时实现多个接口,如果同时继承类和实现接口,类必须在最前   接口可以继承接口   接口中的成员不可以加访问修饰符,隐式为public   接口中的成员不能有实现   接口中的所有成员必须在子类中去直接实现   接口中可以包含属性、方法,但不能包含字段,构造函数   接口提供能力   接口污染,一个接口只做一件事情   interface IFlyable   {     void Fly();     void Speak();   } 接口和抽象类   抽象类中可以有实现而接口中不能有实现   抽象类和接口都不能被实例化   接口的成员在子类中直接实现,抽象类中的抽象成员要重写override 什么时候使用抽象类,什么时候使用接口   抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。   飞机会飞,鸟会飞,他们都实现了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类   ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------    详细请查看:<ahref="http://edu.csdn.net" target="blank">http://edu.csdn.net </a>    

上一篇:企业IT管理之真实小故事-“关键指标”篇(3)
下一篇:jquery ui怎么修改主题theme

相关文章

相关评论