7.1类的抽象:

在面向对象思想中,所有的对象都可以通过类来描述。但并不是所有的类都是用来描述对象的,如果一个类中没有包含能够描述具体对象的信息,那么就称其为抽象类。
语法
abstract class 类名{}
特性:
1、抽象成员必须放在抽象类中。
2、抽象类中的成员不一定全是抽象成员
3、抽象类不能实例化
4、抽象类方法不能有具体的实现
5、所有被继承的抽象成员都应在子类中实现
6、子类必须实现父类所有的抽象成员
代码示例:

//定义父类电器类,因为所有的电器都能充电,所以在类中定义充电方法,但是电器只是抽象的概念,因此充电方法无法实现,只能定义抽象方法。
abstract class Appliance
{public abstract void Charge();
}
//定义电脑子类和手机子类继承于电器类,并在子类中重写父类方法
class Computer:Appliance{public override void Charge(){Console.WriteLine("电脑使用220v电压充电")}
}
class Phone:Appliance{public override void Charge(){Console.WriteLine("手机使用110v电压充电")}
}
//创建电脑和手机对象,并调用充电方法
static void Main(string[] args){Appliance cpt=new Computer();Appliance mp=new Phone();cpt.Charge();mp.charge();
}

7.2接口:

c#中子类最多只允许有一个父类,如果一个类需要具有多个类的特征或行为,那么就可以通过接口实现。c#中的接口用于约束类的行为。
自定义接口语法:

[访问修饰符] interface 接口名{}

注意点
1、接口名一般使用大写字母"I"开头,表明它是接口类型
2、接口可包含方法、属性、事件和索引器,但不能包含字段
3、接口中定义的成员不允许有具体实现
代码示例一

class Person:IComparable<Person>
{private string name;private int age;public Person(){}public Person(string name,int age){this.Name = name;this.Age = age;}public string Name{get { return name; }set { name = value; }}public int Age{get { return age; }set { age = value; }}public void Show(){Console.WriteLine("大家好,我叫{0},今年{1}岁",this.Name,this.Age);}public int CompareTo(Person other){return this.Age.CompareTo(other.Age);//年龄递增//年龄递减return other.Age.CompareTo(this.Age);}
}
static void Main(string[] args){Person ma = new Person("张三", 22);Person lei = new Person("李四", 20);Person chen = new Person("王五", 21);List<Person> list = new List<Person>();list.Add(ma);list.Add(lei);list.Add(chen);foreach(Person item in list){item.Show();}list.Sort();Console.WriteLine("=====================排序后===================");foreach(Person item in list){item.Show();}
}

代码示二:

//自行车接口
class IBicycle{public interface IBicycle(){//使用方法void UsageMethod();}
}
//电机接口
calss IElectromotor{public interface IElectromotor(){//充电方法void Charging();}
}
public class EIectricBicycle{private string brand;public string Brand{get { return brand; }set { brand = value; }}public void UsageMethod(){Console.WriteLine("{0}电动车是用电机驱动的",Brand);}public void Charging(){Console.WriteLine("{0}电动车的充电电压 为220v",Brand);}
}
static void Main(string[] args){EIectricBicycle eb=new EIectricBicycle();eb.Bran="天马";eb.UsageMethod();eb.Charging();
}

7.3抽象类和接口的区别:

抽象类 接口
使用abstract关键字 使用interface关键字
可以包含字段和已实现成员 不能包含字段,只能包含未实现的成员
子类通过override实现抽象方法 子类直接实现所有成语

代码示例:

//妖怪抽象类
public abstract class Monster
{private string name;//名字private int hp;//生命值private int mp;//魔法值public string Name{get { return name; }set { name = value; }}public int Hp{get { return hp; }set { hp= value; }}public int Mp{get { return mp; }set { mp = value; }}//显示基本信息public void ShowInfo(){Console.WriteLine("{0}的生命值和魔法值为{1},{2}",Name,Hp,Mp);}//恢复生命值public virtual void AutomaticHp(){Console.WriteLine("{0}自动恢复生命值,{2}",Name);}
}
//英雄和妖怪都有攻击的方法
public interface IAttack{//物理攻击void PhysicalAttack();//魔法攻击void MagicalAttack();
}
public class Fox:Monster,IAttack{public void PhysicalAttack(){Console.WriteLine("狐妖的物理攻击是“金刚爪”。");}public void MagicalAttack(){Console.WriteLine("狐妖的魔法攻击是“妖气爪”。")}
}
static void Main(string[] args){    Fox fox=new Fox(){Name="小狐狸",Hp=10000,Mp=4000};fox.ShowInfo();fox.AutomaticHp();
}

c#面向对象程序设计——类的抽象相关推荐

  1. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  2. python编程语言继承_Python面向对象程序设计类的封装与继承用法示例

    本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义 ...

  3. 面向对象程序设计中对抽象的理解

    在面向对象软件开发中抽象是最基本的方法,抽象到底是什么呢?抽象和接口有什么关系呢?在这里谈谈自己的看法. 抽象的过程也是一个裁剪的过程,不同的.非本质性的特征全部裁剪掉了,即就是抽取事物的共同特征就是 ...

  4. mooc程序设计与算法(三)C++面向对象程序设计 类和对象提高 编程作业 5:魔兽世界之一:备战

    5:魔兽世界之一:备战 这道题是典型的,看了题目不想做题系列... 题目太长,看了,看不懂....后来,上网找了某博客中据说是老师的代码,研究了一下,觉得真的,c++面向对象编程还是很深奥的....下 ...

  5. 面向对象程序设计——类与对象的应用2

    一.实验目的: 掌握类和对象的概念.定义和使用方法. 掌握静态数据成员和const修饰的成员函数的用法. 掌握c++程序的一般结构. 二.实验内容: 在个人的活期储蓄账户类SavingsAccount ...

  6. JavaScript中的面向对象程序设计

    本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...

  7. python不完全支持面向对象程序设计_Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】...

    本文实例讲述了Python面向对象程序设计OOP.分享给大家供大家参考,具体如下: 类是Python所提供的最有用的的工具之一.合理使用时,类可以大量减少开发的时间.类也在流行的Python工具中使用 ...

  8. python类与对象作业_荐富贵和你一起复习Python(第10篇)— 面向对象程序设计

    继续复习Python,今日复习 -- 面向对象程序设计,中间会有自己的心得体会,要是有什么错误或者补充可直接评论或者私信哟. 面向对象程序设计 面向对象程序设计的思想主要针对大型软件设计提出,能够很好 ...

  9. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第二章:类和对象初步(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter2:类和对象初步 数据结构+算法=程序 $2.1结构化程序设计的不足     结构化程序设计也称面向过程的程序设计,过程是用函数实现的 ...

最新文章

  1. 自动驾驶感知系统盘点
  2. Escape Time II 简单的深搜dfs()
  3. 20135331 文艺 java实验
  4. 【.Net Micro Framework PortingKit(补) – 1】USB驱动开发
  5. 前端学习(2486):$emit
  6. [转]OpenGL超级宝典 5e 环境配置
  7. Activity——思维导图
  8. ES6解构赋值原理详解
  9. “这样使用RHEL合法吗”?
  10. ubuntu下c 调用java_ubuntu下使用JNI Java调用C++的例子
  11. 多种交换机端口镜像 Port Mirroring 配置
  12. oracle merge into where,Oracle merge into语法简介
  13. 数学建模之层次分析法(AHP)
  14. Oracle 字符串批量替换
  15. silvaco使用中的问题和解决方法
  16. 奥克兰大学商学院计算机专业,奥克兰大学的商科专业 推荐三大专业
  17. 坚持学习,坚持阅读,坚持思考
  18. 第四届蓝桥杯真题决赛java本科组
  19. 实时视频通话超低延迟架构的思考与实践
  20. Strong-Convexity:强凸性

热门文章

  1. 【计量经济学导论】03. 矩阵形式的线性回归模型
  2. HEP-DH车载一氧化碳报警器
  3. 初识对象,对象的创建以及方法的定义规则
  4. 在竞争激烈的情况下,ReentrantLock与CAS的性能比较
  5. 绩效管理中的绩效主义问题
  6. Python 爬取揭秘,你的考研调剂对手就有谁?这次考研有你吗
  7. Developing circuit
  8. Android四大组件之Activity(第一篇-简单使用)
  9. 黑羽压测 比 jmeter、locust、loadrunner 更简便,性能更强
  10. 如何查找SAP notes