一、什么是接口?

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

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

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

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

  接口中的所有成员,都不能写任何访问修饰符,默认是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. Spring aop框架使用的jar包

    除了前两个jar包,后面的jar包spring框架包中都有,前两个jar包的下载地址:https://pan.baidu.com/s/1L-GLGT1c8vnwFwqLxzzZuw

  2. 快速入门Vue

    前端技术发展很快,近日一个项目中想用Vue框架,对此对Vue基础进行了一些学习整理 何为Vue,官网 解释Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架 这里记录 ...

  3. HDU 2147 P/N博弈

    点这里去做题 如图 找必胜点和必败点, 1.终点为必胜点 2.所有能一步走到必胜点的都是必败点 3.每一步都只能走到必败点的是必胜点 #include<bits/stdc++.h> usi ...

  4. Ubuntu 16.04.2 配置VNC

    1安装包apt-get update sudo apt install xfce4 xfce4-goodies tightvncserversudo apt-get install vnc4serve ...

  5. SpringMVC框架出现 405 request method post not supported 的解决方法

    在SpringMVC框架中当使用post请求服务,然后请求成功转到一个静态文件,如html,htm等网页时.页面出现405 request method post not supported错误,只要 ...

  6. windows10的环境变量path如何列表显示

    如果你的变量值以%开头,打开编辑的时候就会显示一串的变量值,不方便查找编辑 所以将变量值更改为以盘符开始,就可以解决这个问题,比如:D:\WorkSoft\app\product\11.2.0\dbh ...

  7. 关于浏览器跨域的一种实现--jsonp

    最近一直在搞python,前端技术荒废很久了,今天跟前端联调,设计到一个前端跨域的问题:前端人员告诉我可以用jsonp的方式实现,经他这么一提醒,也是豁然开朗. jsonp的实现方式我按照我的理解说一 ...

  8. [转] Firewall and network filtering in libvirt

    Firewall and network filtering in libvirt There are three pieces of libvirt functionality which do n ...

  9. Akka-CQRS(1)- Write-side, Persisting event sources:CQRS存写端操作方式

    上篇我们提到CQRS是一种读写分离式高并发.大流量数据录入体系,其中存写部分是通过event-sourcing+akka-persistence实现的.也可以这样理解:event-sourcing(事 ...

  10. 吴恩达机器学习笔记6-梯度下降II(Gradient descent intuition)--梯度下降的直观理解

    在之前的学习中,我们给出了一个数学上关于梯度下降的定义,本次视频我们更深入研究一下,更直观地感受一下这个算法是做什么的,以及梯度下降算法的更新过程有什么意义.梯度下降算法如下: 描述:对