/// <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. Codeforces Gym 100500F Problem F. Door Lock 二分

    Problem F. Door LockTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/at ...

  2. delphi 添加节点

      //在选中的节点中上添加1个节点 procedure TForm1.Button1Click(Sender: TObject); begin     with TreeView1 do     b ...

  3. iOS开发——图形编程OC篇&粘性动画以及果冻效果

    粘性动画以及果冻效果 在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: 先做个提纲 ...

  4. 跳表SkipList

    原文:http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html 跳表SkipList   1.聊一聊跳表作者的其人其事 2. 言归正 ...

  5. 主流Jquery弹出框优缺点对比

    一:BoxXy 缺点:动态加载隐藏的内容层时,是复制操作,而不是引用原内容层,这样会出现两个一样的内容层,影响id,class的jquery操作 二:artdialog

  6. Linux编程之《进程/线程绑定CPU》

    Intro----- 通常我们在编写服务器代码时,可以通过将当前进程绑定到固定的CPU核心或者线程绑定到固定的CPU核心来提高系统调度程序的效率来提高程序执行的效率,下面将完整代码贴上. /***** ...

  7. Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换,以及视图之间传值。

    所有的视图都继承自 UIViewController,都使用 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nib ...

  8. kali的openvas安装 留下笔记

    kali的openvas安装 留下笔记,以便下次再查开始在kali找openvas,竟然kali不自带,害的要下载. apt-get updateapt-get dist-upgradeapt-get ...

  9. oracle数据库性能调优

    一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子 ...

  10. LeetCode 45

    Jump Game II Given an array of non-negative integers, you are initially positioned at the first inde ...