一、什么是接口?

  接口就是一种规范协议,约定好遵守某种规范就可以写通用的代码。

  定义了一组具有各种功能的方法(只是一种能力,没有具体实现,就像抽象方法一样,“光说不做”)。

  理解:内存该做成什么样的:电压多少,插线多少,这是一种国际规范,是接口。而,内存这个东西具体生产出来了,就是实现接口。不管是什么品牌的电脑,买来内存都能用,这是多态。

  接口可以包含:方法、属性、索引器,事件。  其实都是方法。

  接口中的所有成员,都不能写任何访问修饰符,默认是public。

  接口的成员,子类必须实现。

二、接口的作用。

  接口可以实现多继承。

  接口解决了不同类型之间的多态问题,比如鱼和船不是同一种类型,但是都能在水里“游泳”,只是方式不同,所以可用接口。(下面实例最后一步,逻辑上,car不属于person类,但是仍然可以实现多态)

三、实例。

我想登记每个国家的人,可以使用方法重载,传入不同类型的参数,实现对应的方法,但是会写很多。 而且如果要添加一个国家的人,得改代码,可扩展性差。

class Program
{
static void Main(string[] args)
{
Chinese chinese = new Chinese();
DengJi(chinese);
American american = new American();
DengJi(american);
}
public static void DengJi(Chinese chinese)
{
chinese.Show();
}
public static void DengJi(American american)
{
american.Show();
}
}
class Chinese
{
public void Show()
{
Console.WriteLine("中国人,18岁");
}
}
class American
{
public void Show()
{
Console.WriteLine("美国人,19");
}
}

优化一:通过继承实现多态, 用参数的时候用父类,具体操作看父类中存储的对象。------     提取出父类Person,使用虚方法或者抽象方法。因为Person不需要实例化,所以我用抽象类。

class Program
{
static void Main(string[] args)
{
Chinese chinese = new Chinese();
DengJi(chinese);
American american = new American();
DengJi(american);
}
public static void DengJi(Person person)
{
person.Show();
}
}
public abstract class Person
{
public abstract void Show();
}
class Chinese:Person
{
public override void Show()
{
Console.WriteLine("中国人,18岁");
}
}
class American:Person
{
public override void Show()
{
Console.WriteLine("美国人,19");
}
}

优化二:如果我要登记一辆车,车继承了Person类,不符合逻辑,但我又要实现多态,任何东西都能登记。所以我选择用接口。

 class Program
{
static void Main(string[] args)
{
Chinese chinese = new Chinese();
DengJi(chinese);
Car car = new Car();
car.Show();
}
public static void DengJi(IShowInfo person)
{
person.Show();
}
}
public interface IShowInfo
{
void Show();
}
public abstract class Person:IShowInfo
{
public abstract void Show();
}
class Chinese:Person
{
public override void Show()
{
Console.WriteLine("中国人,18岁");
}
}
class American:Person
{
public override void Show()
{
Console.WriteLine("美国人,19");
}
}
class Car :IShowInfo
{
public void Show()
{
Console.WriteLine("本田,2.0t");
}
}

这样一来,无论什么东西,只要继承了接口,都能登记。

C#实现多态之接口。的更多相关文章

  1. java匿名内部类,多态,接口练习

    1多态以及接口调用方法: public class Interface { public static void main(String[] args) { Al x = new Al(); jian ...

  2. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  3. java基础三 [深入多态,接口和多态](阅读Head First Java记录)

    抽象类和抽象方法 1.抽象类的声明方法,在前面加上抽象类的关键词abstract abstract class canine extends animal{      public void roam ...

  4. Java基础第二天--多态、接口

    多态 多态的概述 同一个对象,在不同时刻表现出来的不同形态 多态的前提和体现 有继承/实现关系 有方法重写关系 有父类引用指向子类对象 public class Animal { public voi ...

  5. C# 多态和接口

    1多态可以有属性,接口只有方法 2关键字不同,多态有静态多态(abstract)和动态多态(virtual),静态多态不能new()出自己,动态多态可以;多态中可以有自己的方法可设置不需要子类重写,接 ...

  6. java 面向对象面试题,问答题,构造方法,抽象类,继承,多态,接口,异常总结;

    一,构造方法的特点 面向对象的思想是如何在java展现的呢? 就是通过类和对象 类是一组相关的属性和行为的集合.是一个抽象的概念. 对象是该类事物的具体表现形式.具体存在的个体. 一.抽象类的抽象方法 ...

  7. Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...

  8. 多态and接口

    一.多态 1.什么是多态? 解析:不同的对象对于同一个操作,做出的响应不同 具有表现多种形态的能力的特征 2.使用多态的优点 解析:为了实现统一调用 一个小例子:<父类类型作为参数> 父类 ...

  9. 初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

    JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM, ...

  10. Java中关于继承、类、多态、接口的知识点

    继承 含义:在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类 优点:1)代码的重用性:2)子类扩展父类的属性和方法:3)父类的属性和方法可用于子类:4)设计应用程序 ...

随机推荐

  1. JDBC数据库

    JDBC是Java程序连接和存取数据库的应用程序接口(API),包括两个包:java.sql和javax.sql. 用JDBC访问数据库的一般步骤: 1.建立数据源 2.装入JDBC驱动程序:使用Cl ...

  2. ssh 使用 sed 替换的时候,替换的字符串有单双引号的时候怎么用

    线上有一个脚本需要 ssh 登录远程机,然后完成特定文件中的某个值,替换的字符中有单引号,所以需要特定的写法,才能成功 1).ssh 远程执行命令,替换字符串中有单引号( ' ) ssh zhuzi@ ...

  3. 点击a标签的文字后页面的跳转

    1.方法一 (1)js var html=""; html+="<a href=\"#\" onclick=\check('"+id+ ...

  4. 安装Pangolin

    Pangolin是一个用于OpenGL显示/交互以及视频输出的一个轻量级 快速开发库 一:安装必要的库 1.Glew sudo apt-get install libglew-dev 2.Cmake ...

  5. win10 win7 环境下 oracle 11g和Plsql的安装、卸载遇到的问题。

    * win7一体机在安装好oracle和PlSQL后,无法连接到orcl数据库,同时也忘记了sys设置的密码.(在这里应注意在安装过程中,应选择统一口令,这里我均设置成了orcl,同时也应该注意在最后 ...

  6. JavaScript 中的正则表达式

    1.正则表达式概述 ECMAScript 3 开始支持正则表达式,其语法和 Perl 语法很类似,一个完整的正则表达式结构如下: 1 var expression = / pattern / flag ...

  7. Fiddler的配置

    增加监控请求的详情时间  //添加请求的响应时间 public static BindUIColumn("Time Taken")           function CalcT ...

  8. UML2.0最新版入门图解

    一.UML概述 UML(UnifiedModelingLanguage)统一建模语言,是面向对象软件的标准化建模语言.由于面向对象软件开发需要经过OOA(面向对象分析),OOD(面向对象设计),OOP ...

  9. 腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践

    本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦.” 1.GIF格式的历史 GIF ( Gr ...

  10. Android MediaPlayer SeekTo 在 8.0 版本上优化说明

    android使用 mediaPlayer 播放video视频过程中, 当用户退出当前播放,再从后台恢复播放时,需要跳转到之前退出的时间点继续播放.使用的方法基本都是 SeekTo 之前的时间点,但是 ...