using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 接口
{
public interface IFlyable
{
void liftoff();
}
public class Bird:IFlyable
{
public virtual void liftoff()
{
Console.WriteLine("Bird has lift off!!");
}
} public class Superman:IFlyable
{
public void liftoff()
{
Console.WriteLine("Superman has lift off!!");
}
} public class Sparrow : Bird
{
public override void liftoff()
{
Console.WriteLine("Sparrow has lift off!!");
}
} public abstract class Ufo:IFlyable //抽象类的存在只为被继承 抽象方法只允许在抽象类中定义而且不能在其中被实现
{ public virtual void liftoff()
{
Console.WriteLine("UFO has lift off!");
}
} public class MarsUfo : Ufo
{
public override void liftoff()
{
Console.WriteLine("UFO take-off from Mars");
}
} public class Car
{
} public class TestInterface1
{
public static void Test1()
{
//IFlyable fly = new IFlyable();//flase 无法创建接口的实例 但如果new的是 Superman类 的话则编译能通过(其它非实现该接口的类均不可以) IFlyable fly = new Superman(); //该类实例化了这个接口 故可以把它当接口来使用
fly.liftoff(); //这跟类实例化对象不同 类拥有的方法他不一定有 而接口有点类的实例一定有 接口关心的是“合同”里面的内容 fly = null; // 这样子做比较安全 目的跟c++ 不声明为初始化的指针一样 为了安起见
fly=new Bird (); //指向 鸟
fly.liftoff(); //多态
Console.WriteLine("--------------------");
} public static void Test2()
{
//接口允许派生类使用
IFlyable fly=new Bird();
fly = new Sparrow();
fly.liftoff();
Console.WriteLine("-----------------------");
} public static void Test3()
{
//IFlyable fly=new Ufo (); //抽象类不能 当作接口 抽象类无法创建对象
Ufo ufo = new MarsUfo(); //抽象父类 实例子类是可以的 IFlyable fly = ufo; //可以被抽象类的子类实现 fly.liftoff();
} public static void Test4()
{
Superman obj1 = new Superman();
//UseInterface(obj1 ); Bird obj2 = new Sparrow();
//UseInterface(obj2); Car obj3 = new Car();
//UseInterface(obj3);//不是接口
UseInterface2(obj1 );
UseInterface2(obj3); } public static void UseInterface(IFlyable fly)
{
fly.liftoff();
} public static void UseInterface2(object obj)
{ //if (obj is IFlyable )
//{
// IFlyable fly = (IFlyable)obj;
// fly.liftoff();
//}
//else
//{
// Console.WriteLine("{0}没有实现接口",obj);
//}
IFlyable fly=null;
fly=obj as IFlyable;//IFlyable fly=obj as IFlyable
if (fly==null)
{
Console.WriteLine("转换失败");
}
else
{
fly.liftoff();
}
}
}
}

C#----接口与抽象类的更多相关文章

  1. 从接口、抽象类到工厂模式再到JVM来总结一些问题

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...

  2. (转)深入理解Java的接口和抽象类

    原文地址: http://www.cnblogs.com/dolphin0520/p/3811437.html 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP ...

  3. c++ 接口和抽象类

    其实对抽象类与接口的区别一直是搞不太清楚,最近正在学习<设计模式>,期间用到了很多c++多态的知识.这是才恍然发现,是应该整理下这方面的知识了.但在翻阅书本.上网查阅资料之际,发现有篇文章 ...

  4. android中接口和抽象类的区别

    最近发现很多基础有点生疏了,特地写一点博客来巩固一下.今天主要来谈谈接口和抽象类的区别,我们在项目的很多地方都会用到接口或者抽象类,但是它们之间的一些区别和相同点不知道大家有没有注意到,还有就是,什么 ...

  5. 深入理解Java的接口和抽象类(转)

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  6. c#接口与抽象类的区别

    abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...

  7. Java接口和抽象类的区别

    今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...

  8. 深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  9. C#基础系列——一场风花雪月的邂逅:接口和抽象类

    前言:最近一个认识的朋友准备转行做编程,看他自己边看视频边学习,挺有干劲的.那天他问我接口和抽象类这两个东西,他说,既然它们如此相像, 我用抽象类就能解决的问题,又整个接口出来干嘛,这不是误导初学者吗 ...

  10. [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

    目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...

随机推荐

  1. <基于Qt与POSIX线程>多线程下载器的简易搭建

    原创博客,转载请联系博主! 本项目已托管到本人Git远程库:https://github.com/yue9944882/Snow 项目目标  Major Functionality 开发环境:  Ce ...

  2. LINQ 学习路程 -- 查询操作 Average Count Max Sum

    IList<, , }; var avg = intList.Average(); Console.WriteLine("Average: {0}", avg); IList ...

  3. PE.微PE

    1.老毛桃,大白菜(20180227) ZC:我记得以前 "老毛桃"."大白菜" 之前的版本,在安装好系统之后,是没有捆绑软件的,.现在,老毛桃 安装完系统之后 ...

  4. html符号实体

    对网页设计,软考有用的字符实体

  5. linux 文件存取 软硬联接的区别

    一.linux文件存取过程 在linux系统中根目录是自引用的,比如要找 /etc/sysconfig/networkscripts/ifcfg-0文件 先根据根目录/ 的inode号,在inode ...

  6. JavaScript 的 async/await

    随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await. 异步编程的最高境界,就是根本不用关心它是不是异步. async 函数就是隧道尽头的亮光,很多人认 ...

  7. 1W字看懂互联网知识经济

    互联网知识经济,发生关键变化的不是知识,而是经济. 今天和大家分享方军老师的新书<付费:互联网知识经济的兴起>.这本书是一个老互联网人看新知识经济,很有意思的视角在于,以互联网的发展为节点 ...

  8. 2017各银行贷款利息表及P2P平台贷款利率比较

    银行贷款利息是多少?2017各银行贷款利息表及P2P平台贷款利率比较 发表时间: 2017-02-17 作者: 一.2017央行贷款基准率 各个银行的贷款利率是以中国银行的人民币贷款基准率为标准进行上 ...

  9. JavaUtil_09_email_使用 commons-email 发送邮件

    二.参考资料 1.[commons]邮件发送工具——commons-email

  10. hdu-5640 King's Cake (水题)

    题目链接 King's Cake Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others ...