abstract
/// <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的更多相关文章
- abstract与interface之房祖名张默版
最近把java基础知识拿出来看看,看到abstract与interface的时候,觉得有点模糊,好像面试官也喜欢问这个问题.我在百度了查了好长时间,觉得讲算比较清楚的是那篇讲 Door,然后想要带个报 ...
- [Erlang 0111] Erlang Abstract Format , Part 2
上回书,我们说到飞天玉虎蒋伯芳来到蜈蚣岭,不是,重来,上回咱们说到可以在Erlang Shell里面手工构造,加载并调用一个模块.在那个demo里面,我把多个Form单独生成出来,最后放在一起做 ...
- [Erlang 0110] Erlang Abstract Format , Part 1
Erlang Abstract Format并不难懂,只是枯燥一点罢了,如果把Abstract Format的文档翻译出来,其实就是Erlang教科书中语法入门的部分. Erlang Abstract ...
- C#中Abstract和Virtual的区别
c# 中 Abstract和Virtual比较容易混淆,都与继承有关,并且涉及override的使用.下面讨论一下二者的区别: 一.Virtual方法(虚方法) virtual 关键字用于在基类中修饰 ...
- Java Abstract Class & Interface
一. 抽象类 1. 抽象类:包含了一个抽象方法的类就是抽象类 2. 抽象方法:声明而未被实现的方法,用关键字abstract声明 3. 抽象类被子类继承,子类(如果不是抽象类)必须重写(overrid ...
- java关键字extends(继承)、Supe(父类引用空间)、 This(方法调用者对象)、Instanceof(实例类型-判断对象是否属于某个类)、final(最终)、abstract(抽象) 、interface(接口)0
java 继承使用关键字extends 继承的作用:减少代码量,优化代码 继承的使用注意点: 1子类不能继承父类的私有变量 2.子类不能继承父类的构造方法 3.子类在调用自己的构造方法时 会默认调 ...
- abstract与interface的区别
abstract的用法: //通过abstract 关键字修饰的类叫抽象类. abstract class Animal { String name; String color; abstract p ...
- Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息
Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息 http://www.cnblogs.com/zhwx/archive/2012/08/28/266055 ...
- c#中abstract与virtua、overridel的用法
1.abstract 抽象方法 ,virtual 虚方法 ,override 重载函数 父类A.m() 子类B.m() abstract的方法父类可以不实现,让子类去重写(重写=overwrite ...
- 一张图看懂normal,static,sealed,abstract 的 区别
+-------------------------+---+--------+--------+--------+----------+ | Class Type | | normal | stat ...
随机推荐
- PPTP + FreeRADIUS + MySQL 安装与配置
原文地址:http://www.zhukun.net/archives/5375 PPTP + FreeRADIUS + MySQL 安装与配置 2012/03/29Linux运维centos.Fre ...
- java中需要关注的3大方面内容/Java中创建对象的几种方法:
1)垃圾回收 2)内存管理 3)性能优化 Java中创建对象的几种方法: 1)使用new关键字,创建相应的对象 2)通过Class下面的new Instance创建相应的对象 3)使用I/O流读取相应 ...
- C++ 析构方法
1.什么是析构方法? 析构方法与构造方法互补. 2.为什么设计析构方法? 构造方法创建一个对象,对象内部往往还会申请一些资源.设计析构方法的目的是 释放资源,同时销毁自身. 3.析构方法可以认为分为两 ...
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) A. Bear and Poker 分解
A. Bear and Poker Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/573/pro ...
- android 关于提高第三方app的service优先级
本博客仅仅要没有注明"转".那么均为原创,转贴请注明本博客链接链接 基本上大家都知道提高service优先级能够在非常大程度上让你的service免于由于内存不足而被kill,当然 ...
- android service总结
1.通过startservice方法启动一个服务.service不能自己启动自己.若在一个服务中启动一个activity则,必须是申明一个全新的activity任务TASK.通过startservic ...
- strcpy_s与strcpy的比較
strcpy_s和strcpy()函数的功能差点儿是一样的.strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它仅仅能假定缓冲足够大来容纳要拷贝的字符串.在程序执行时,这将 ...
- day06 Java基础
1.二维数组格式一(列固定):数据类型[][] 变量名=new 数据类型[m][n]; 二维数组格式二(列变化):数据类型[][] 变量名=new 数据类型[m][]; 二维数组格式三:数据类型[][ ...
- extern的困惑
摘自:http://blog.csdn.net/fxjtoday/article/details/6021845 如果想明白为什么需要extern, 需要从编译和链接讨论起, 现代编译器一般采用按文件 ...
- mysql高效获取两张表共同字段的交集数据
例如下面两站表A,B.A表和B表分别有5-10w数据.A表结构如下:id bid name title publisher extraB表结构如下id bid name title publisher ...