c#面向对象程序设计——类的抽象
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#面向对象程序设计——类的抽象相关推荐
- php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例
本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...
- python编程语言继承_Python面向对象程序设计类的封装与继承用法示例
本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义 ...
- 面向对象程序设计中对抽象的理解
在面向对象软件开发中抽象是最基本的方法,抽象到底是什么呢?抽象和接口有什么关系呢?在这里谈谈自己的看法. 抽象的过程也是一个裁剪的过程,不同的.非本质性的特征全部裁剪掉了,即就是抽取事物的共同特征就是 ...
- mooc程序设计与算法(三)C++面向对象程序设计 类和对象提高 编程作业 5:魔兽世界之一:备战
5:魔兽世界之一:备战 这道题是典型的,看了题目不想做题系列... 题目太长,看了,看不懂....后来,上网找了某博客中据说是老师的代码,研究了一下,觉得真的,c++面向对象编程还是很深奥的....下 ...
- 面向对象程序设计——类与对象的应用2
一.实验目的: 掌握类和对象的概念.定义和使用方法. 掌握静态数据成员和const修饰的成员函数的用法. 掌握c++程序的一般结构. 二.实验内容: 在个人的活期储蓄账户类SavingsAccount ...
- JavaScript中的面向对象程序设计
本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...
- python不完全支持面向对象程序设计_Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】...
本文实例讲述了Python面向对象程序设计OOP.分享给大家供大家参考,具体如下: 类是Python所提供的最有用的的工具之一.合理使用时,类可以大量减少开发的时间.类也在流行的Python工具中使用 ...
- python类与对象作业_荐富贵和你一起复习Python(第10篇)— 面向对象程序设计
继续复习Python,今日复习 -- 面向对象程序设计,中间会有自己的心得体会,要是有什么错误或者补充可直接评论或者私信哟. 面向对象程序设计 面向对象程序设计的思想主要针对大型软件设计提出,能够很好 ...
- 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第二章:类和对象初步(新标准C++程序设计)
以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter2:类和对象初步 数据结构+算法=程序 $2.1结构化程序设计的不足 结构化程序设计也称面向过程的程序设计,过程是用函数实现的 ...
最新文章
- 自动驾驶感知系统盘点
- Escape Time II 简单的深搜dfs()
- 20135331 文艺 java实验
- 【.Net Micro Framework PortingKit(补) – 1】USB驱动开发
- 前端学习(2486):$emit
- [转]OpenGL超级宝典 5e 环境配置
- Activity——思维导图
- ES6解构赋值原理详解
- “这样使用RHEL合法吗”?
- ubuntu下c 调用java_ubuntu下使用JNI Java调用C++的例子
- 多种交换机端口镜像 Port Mirroring 配置
- oracle merge into where,Oracle merge into语法简介
- 数学建模之层次分析法(AHP)
- Oracle 字符串批量替换
- silvaco使用中的问题和解决方法
- 奥克兰大学商学院计算机专业,奥克兰大学的商科专业 推荐三大专业
- 坚持学习,坚持阅读,坚持思考
- 第四届蓝桥杯真题决赛java本科组
- 实时视频通话超低延迟架构的思考与实践
- Strong-Convexity:强凸性