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. 对象的数据位于何处? 有两种方式 ...
随机推荐
- Java -- 容器使用 Set, List, Map, Queue, Collections
1. ArrayList ArrayList<String> c = new ArrayList<String>(); c.add("hello"); c. ...
- CV2图像操作
一.读入图像使用函数cv2.imread(filepath,flags)读入一副图片filepath:要读入图片的完整路径flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入一 ...
- Android Studio 技巧备忘
1.日志输入匹配 在日志输入框,点击Edit Filter Configuration 输入syso,并匹配规则 这样就过滤出自己想要的日志
- Linux下开放防火墙端口
方法一:1.vi /etc/sysconfig/iptables 2.-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEP ...
- Django 文件下载功能
def file_download(request): con= MySQLdb.connect(host='192.168.xxx.xxx',user='root',passwd='xxxx',db ...
- Cot
题目大意 两种操作 给坐标上一个直角三角形中每个整点权值$+1$ 求坐标上一个直角三角形中每个整点权值之和 题解 一顿分析思考加推导之后,发现并不存在这样的数据结构(大概是有,只是我不知道),于是考虑 ...
- vue 常见的新增、编辑、查看公用同一个页面
用vue开发经常会碰到,一个功能的新增.编辑.查看公用同一个页面,如果是页面暂且不提. 但是弹框,很多人会发现,如果是点击编辑,取消,再点新增,弹框上面是会有残留数据的,为什么会这样呢,因为在点编辑的 ...
- [转]HTTP Header 详解
HTTP Header 详解 HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模 型,浏览器或其他客户端发出请求 ...
- BZOJ4003:[JLOI2015]城池攻占
浅谈左偏树:https://www.cnblogs.com/AKMer/p/10246635.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...
- GSM/GPRS操作示例
A6(GPRS) 博文转自安信科技: http://wiki.ai-thinker.com/gprs/examples 1.电话接收 相关指令 ATDxxxxx;//xxx为电话号码 示例 打电话 ...