/// <summary>
     /// 抽象类不能被直接实例化
     /// is a
     /// </summary>
     public abstract class BasePhone
     {
         public void Show()
         {
             Console.WriteLine("");
         }

         public int Price { get; set; }

         /// <summary>
         /// 品牌
         /// </summary>
         /// <returns></returns>
         public abstract string Brand();

         /// <summary>
         /// 系统
         /// </summary>
         /// <returns></returns>
         public abstract string System();

         /// <summary>
         /// 打电话
         /// </summary>
         public abstract void Call();

         /// <summary>
         /// 拍照
         /// </summary>
         public abstract void Photo();

2.基本接口作为约束

     /// <summary>
     /// can do
     /// </summary>
     public interface IExtend
     {
         void ApplePay();
     }

     public interface INet
     {
         void Online();
     }

接口

3.各个手机的实现

     /// <summary>
     /// 手机
     /// </summary>
     public class iPhone : BasePhone, IExtend, INet
     {
         /// <summary>
         /// 品牌
         /// </summary>
         /// <returns></returns>
         public override string Brand()
         {
             return "iPhone";
         }

         /// <summary>
         /// 系统
         /// </summary>
         /// <returns></returns>
         public override string System()
         {
             return "IOS";
         }

         /// <summary>
         /// 打电话
         /// </summary>
         public override void Call()
         {
             Console.WriteLine("User{0} {1} {2} Call", this.GetType().Name, this.Brand(), this.System());
         }

         /// <summary>
         /// 拍照
         /// </summary>
         public override void Photo()
         {
             Console.WriteLine("User{0} {1} {2} Call", this.GetType().Name, this.Brand(), this.System());
         }

         public void ApplePay()
         {
             Console.WriteLine("User{0} {1} {2} ApplePay", this.GetType().Name, this.Brand(), this.System());
         }

         public void Online()
         {
             Console.WriteLine("User{0} {1} {2} Online", this.GetType().Name, this.Brand(), this.System());
         }
     }

iPhone

     /// <summary>
     /// 手机
     /// </summary>
     public class Lumia : BasePhone
     {
         /// <summary>
         /// 品牌
         /// </summary>
         /// <returns></returns>
         public override string Brand()
         {
             return "Nokia";
         }

         /// <summary>
         /// 系统
         /// </summary>
         /// <returns></returns>
         public override string System()
         {
             return "Winphone";
         }

         /// <summary>
         /// 打电话
         /// </summary>
         public override void Call()
         {
             Console.WriteLine("User{0} {1} {2} Call", this.GetType().Name, this.Brand(), this.System());
         }

         /// <summary>
         /// 拍照
         /// </summary>
         public override void Photo()
         {
             Console.WriteLine("User{0} {1} {2} Call", this.GetType().Name, this.Brand(), this.System());
         }
     }

Lumia

     public class Mi : BasePhone
     {
         /// <summary>
         /// 品牌
         /// </summary>
         /// <returns></returns>
         public override string Brand()
         {
             return "XiaoMi";
         }

         /// <summary>
         /// 系统
         /// </summary>
         /// <returns></returns>
         public override string System()
         {
             return "Android";
         }

         /// <summary>
         /// 打电话
         /// </summary>
         public override void Call()
         {
             Console.WriteLine("User{0} {1} {2} Call", this.GetType().Name, this.Brand(), this.System());
         }

         /// <summary>
         /// 拍照
         /// </summary>
         public override void Photo()
         {
             Console.WriteLine("User{0} {1} {2} Photo", this.GetType().Name, this.Brand(), this.System());
         }
     }

Mi

abstract用override写,接口直接实现.

abstract的更多相关文章

  1. abstract与interface之房祖名张默版

    最近把java基础知识拿出来看看,看到abstract与interface的时候,觉得有点模糊,好像面试官也喜欢问这个问题.我在百度了查了好长时间,觉得讲算比较清楚的是那篇讲 Door,然后想要带个报 ...

  2. [Erlang 0111] Erlang Abstract Format , Part 2

       上回书,我们说到飞天玉虎蒋伯芳来到蜈蚣岭,不是,重来,上回咱们说到可以在Erlang Shell里面手工构造,加载并调用一个模块.在那个demo里面,我把多个Form单独生成出来,最后放在一起做 ...

  3. [Erlang 0110] Erlang Abstract Format , Part 1

    Erlang Abstract Format并不难懂,只是枯燥一点罢了,如果把Abstract Format的文档翻译出来,其实就是Erlang教科书中语法入门的部分. Erlang Abstract ...

  4. C#中Abstract和Virtual的区别

    c# 中 Abstract和Virtual比较容易混淆,都与继承有关,并且涉及override的使用.下面讨论一下二者的区别: 一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰 ...

  5. Java Abstract Class & Interface

    一. 抽象类 1. 抽象类:包含了一个抽象方法的类就是抽象类 2. 抽象方法:声明而未被实现的方法,用关键字abstract声明 3. 抽象类被子类继承,子类(如果不是抽象类)必须重写(overrid ...

  6. java关键字extends(继承)、Supe(父类引用空间)、 This(方法调用者对象)、Instanceof(实例类型-判断对象是否属于某个类)、final(最终)、abstract(抽象) 、interface(接口)0

    java 继承使用关键字extends   继承的作用:减少代码量,优化代码 继承的使用注意点: 1子类不能继承父类的私有变量 2.子类不能继承父类的构造方法 3.子类在调用自己的构造方法时 会默认调 ...

  7. abstract与interface的区别

    abstract的用法: //通过abstract 关键字修饰的类叫抽象类. abstract class Animal { String name; String color; abstract p ...

  8. Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息

    Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息 http://www.cnblogs.com/zhwx/archive/2012/08/28/266055 ...

  9. c#中abstract与virtua、overridel的用法

    1.abstract 抽象方法 ,virtual 虚方法 ,override 重载函数 父类A.m() 子类B.m()   abstract的方法父类可以不实现,让子类去重写(重写=overwrite ...

  10. 一张图看懂normal,static,sealed,abstract 的 区别

    +-------------------------+---+--------+--------+--------+----------+ | Class Type | | normal | stat ...

随机推荐

  1. 发布方配ASP.NET网站服务器

    方配ASP.NET网站服务器是一款简单,轻量,灵活的ASP.NET网站服务器,使用它可以无需安装复杂的IIS,直接就可以运行ASP.NET网站,使用非常简单,把exe文件拷贝到ASP.NET的网站目录 ...

  2. PROCESS_YIELD()宏和C语言的switch语句< contiki学习笔记之七>

    写在前面:  按照main()函数的代码一行一行的分析,该是看到了 etimer_process 这个位置.但是etimer_process实现里的一个宏 PROCESS_YIELD()引出了很多故事 ...

  3. Galera 10.0.20 on CentOS 6.6

    Galera 10.0.20 on CentOS 6.6 0.使用场景 数据库软件:mariadb-galera-10.0.20-linux-x86_64.tar.gz 集群管理:galera-3-2 ...

  4. Codeforces gym 100685 A. Ariel 暴力

    A. ArielTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100685/problem/A Desc ...

  5. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  6. 也来一篇关于Infragistics WPF Report的使用教程 (一)

    前言 Infragistics Report是一款比較灵活的报表控件, 比微软的rdlc控件至少在页面打印上, 页面的控制比較好调整. 这里使用的是Infragistics Ultimate  v14 ...

  7. 用 Graphviz 可视化函数调用

    http://www.ibm.com/developerworks/cn/linux/l-graphvis/

  8. 数据库插入某些数据会变成?,或则select无法读出数据库中的某些数据

    如果你想在数据库中插入“uɷ”,这个字符,直接插入 insert into table value (‘uɷ’),是不行的,这样插入的后果是打开数据后会显示为u?.当你面对这个问题的时候是不是第一个想 ...

  9. Web开发接口测试工具——Postman插件的使用(chrome浏览器)

    Postman是chrome浏览器的一款插件.Postman 可以模拟 http 请求的发送,并自动解析 JSON 和 XML 的返回数据. 可以手动的去配置各类 parameter,还支持 Basi ...

  10. graylog2+syslog-ng+mongodb构建集中管理日志服务器 --转载

    原文地址:http://blog.chinaunix.net/uid-11065483-id-3654882.html 由于公司内需要监控QQ的上下线记录,原本使用了分光+Panabit+Splunk ...