C#----接口与抽象类
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#----接口与抽象类的更多相关文章
- 从接口、抽象类到工厂模式再到JVM来总结一些问题
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...
- (转)深入理解Java的接口和抽象类
原文地址: http://www.cnblogs.com/dolphin0520/p/3811437.html 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP ...
- c++ 接口和抽象类
其实对抽象类与接口的区别一直是搞不太清楚,最近正在学习<设计模式>,期间用到了很多c++多态的知识.这是才恍然发现,是应该整理下这方面的知识了.但在翻阅书本.上网查阅资料之际,发现有篇文章 ...
- android中接口和抽象类的区别
最近发现很多基础有点生疏了,特地写一点博客来巩固一下.今天主要来谈谈接口和抽象类的区别,我们在项目的很多地方都会用到接口或者抽象类,但是它们之间的一些区别和相同点不知道大家有没有注意到,还有就是,什么 ...
- 深入理解Java的接口和抽象类(转)
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- c#接口与抽象类的区别
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...
- Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...
- 深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- C#基础系列——一场风花雪月的邂逅:接口和抽象类
前言:最近一个认识的朋友准备转行做编程,看他自己边看视频边学习,挺有干劲的.那天他问我接口和抽象类这两个东西,他说,既然它们如此相像, 我用抽象类就能解决的问题,又整个接口出来干嘛,这不是误导初学者吗 ...
- [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类
目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...
随机推荐
- ajax删除当前行
$(function(){ $("tr #del").click(function(){ var id = $(this).attr("data-id"); v ...
- 也来谈幂等和CAS
什么是幂等? 一个方法,不管你执行多少次,保证执行的结果总是相同的.这种方法或者服务就是幂等的. 什么是CAS? CAS是Compare And Set的缩写,顾名思义,就是先比较再设置,这种方式避免 ...
- LightOJ 1138 二分
1138 - Trailing Zeroes (III) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: ...
- vue-cli3 set vue.config.js
//config目录下index.js配置文件// see http://vuejs-templates.github.io/webpack for documentation.// path是nod ...
- 程序以html形式发送邮件注意问题
1.样式要写在内部,不要单独定义样式 2.div 使用背景图片在有些浏览器中出不来这时候需要用: <table style="width: 640px" cellpaddin ...
- Memcached 分布式缓存实现原理简介
摘要 在高并发环境下,大量的读.写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生.无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数, ...
- python代码docstring生成文档之sphinx
在使用python中,我们一般在模块,类,函数下使用docstring添加字符串说明性文档,使开发人员更好的可以看懂此代码是做什么用的.然而写了那么多的注释,我们想要一篇文档怎么办,第一种办法不可能将 ...
- 6 Python 数据类型—字符串
字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可. var1 = 'Hello World!' var2 = ...
- svn_学习_01_TortoiseSVN使用教程
二.参考资料 1.TortoiseSVN新人使用指南 2.
- php判断是否是微信浏览器
php判断是否是微信浏览器 直接上代码: <?PHP function is_wechat_browser(){ $user_agent = $_SERVER['HTTP_USER_AGENT' ...