虚方法

抽象类与抽象方法

1、书写规范:

在类前面加上abstract关键字,就成为了抽象类;在一个方法前面加上abstract关键字就成为了抽象方法(抽象方法不能有实现方法,直接在后面加分号)

例:

abstract class Fruit  //抽象类
{
public abstract void GrowInArea(); //抽象方法
}

2、抽象类的注意事项:

1)当一个类变为抽象类之后就不能作为对象来使用了,无法new出来

2)抽象方法必须放在抽象类里面(但抽象类中不一定有抽象方法)

3)没有子类的话可以正常运行

4)抽象类里面的方法只能在该类中调用,若在其他类中调用需要通过子类

3、抽象方法的注意事项:

1)抽象方法里面不能写内容(不能创建对象)

2)子类中必须override才能运行

3)有几种抽象方法,就必须在子类中写几种,否则出错

4、在子类中重写抽象基类的方法:

class Apple:Fruit
{
public override void fangfa()
{
Console.WriteLine("tasty!");
}
}

5、在函数中引用抽象类的子类对象:

抽象类  抽象类变量名 = new 继承自此抽象类的具体子类名();

例:

Fruit f = new Apple();
f.fangfa(); //打印结果为tasty!

注意:包含抽象方法的类一定是抽象类,但抽象类中的方法不一定是抽象方法。

接口

  当一个类与多个类之间都存在关系时,单纯用父子关系无法表达出来,为了解决这个问题,引入了接口这个概念,使一个类可以对应多个接口

  接口可以看做一种“纯”的抽象类,它的所有方法都是抽象方法。

1、接口的定义与使用:

用关键字interface定义接口。例:

public iterface Iswim
{
void Swim();
//接口中不能写字段、方法,Swim()相当于抽象方法,需要在继承该接口的类中重写
}
public iterface Ifood
{
void Cook();
}

实现接口可以用与继承相同的语法。例:

 1 //定义一个抽象类,使Duck继承自一个抽象类,实现两个接口
2 public abstract class Bird
3 {
4 public abstract void Fly();
5 }
6 public class Duck:Bird,Iswim,Ifood
7 {
8 //实现Iswim接口
9 public void Swim()
10 {
11 Console.WriteLine("swim");
12 }
13 //实现Ifood接口
14 public void Cook()
15 {
16 Console.WriteLine("cook");
17 }
18 //实现抽象类Bird中的抽象方法
19 public override void Fly()
20 {
21 Console.WriteLine("fly");
22 }
23 }

使用接口需要套用公式:接口类型名  变量名 = new 实现了接口的类型名();如:

Duck d = new Duck();
d.Fly();
d.Cook();
d.Swim();

c#面向对象基础 重写、虚方法、抽象类的更多相关文章

  1. C#面向对象基础:virtual方法,abstract方法,区别

    virtual 关键字用于修饰方法.属性.索引器或事件声明,并使它们可以在派生类中被重写.默认情况下,类中的方法是非虚的,非虚的方法不能在子类中被覆盖(override),但是可以隐藏(new),但这 ...

  2. C# - 重写虚方法

    项目目录: 创建教师类(Teacher),虚方法有Teach(); 创建学生类(Student),重写的方法是Teach(); 教师类: · 加上关键字 Virtual 就是声明可以重写此方法. us ...

  3. python开发面向对象基础:接口类&抽象类&多态&钻石继承

    一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实 ...

  4. c#面向对象基础 类、方法、方法重载

    C#是纯粹的面向对象编程语言,它真正体现了“一切皆为对象”的精神.在C#中,即使是最基本的数据类型,如int,double,bool类型,都属于System.Object(Object为所有类型的基类 ...

  5. 抽象类和虚方法、base关键字

    微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/abstract ...

  6. 【C#基础概念】虚方法virtual

    目录: 一.虚方法的概念 二.虚方法的特点 三.虚方法的作用 四.虚方法的声明 五.虚方法的执行 六.虚拟类的规则 一.虚方法的概念 在C#中,虚方法就是可以被子类重写的方法,如果子类重写了虚方法,则 ...

  7. 附录A——面向对象基础

    在学习设计模式之前,C#语言中一些基本的面向对象的知识还是应该具备的,比如像继承.多态,接口.抽象类,集合.泛型等. A.2 类与实例 什么是对象? 一切事物(事和物)都是对象,对象就是可以看到.感觉 ...

  8. Csharp多态的实现(虚方法)

    1.什么是抽象类 1.1虚方法是用virtual修饰,在子类中用override进行重写 1.2虚方法是一个方法,放在类里面(可以再下面的代码中看到) 1.3虚方法可以 重写,也可以不重写(这个可以再 ...

  9. C#三大方法:虚方法、静态方法、实例方法

    虚方法:使用virtual关键字定义,当子类继承父类时,可以对父类中的虚方法进行重写. 如下面代码中的类B,它继承类A,类A实现了接口I(实现了接口中的foo()方法).在类A中使用virtual将f ...

随机推荐

  1. Java利用Preferences设置个人偏好

    Java利用Preferences设置个人偏好 Preferences的中文意思即偏好或喜好的意思,也就是说同一个程序在每次运行完后,可以通过Preferences来记录用户的偏好,下次启动时,程序会 ...

  2. 智能车学习(五)—— dac学习

    一.代码共享: 1.dac.h #ifndef DAC_H_ #define DAC_H_ #include "common.h" // 2.2 DAC控制寄存器0 位定义 #de ...

  3. Android加载大图片OOM异常解决

      尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,最终都是通过 ...

  4. 【hibernate 报错】No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer 【get和load的区别】

    报错: HTTP Status 500 - Could not write content: No serializer found for class org.hibernate.proxy.poj ...

  5. PHP入门 - - 05-->编写HTML页面的常用标签

    一.文字版面的编辑 1.格式标签 格式标签用于定义网页中文本的布局.缩进.位置.换行.列表等          <br>           换行          <p>   ...

  6. ajax上传

    使用FormData,进行Ajax请求并上传文件:具体代码如下: html代码: <!DOCTYPE html><html lang="en"><he ...

  7. wordpress修改上传文件大小限制

    在为有的客户搭建 WordPress 网站时,有时会遇到因为所在的服务器限制了上传文件大小而无法上传较大的附件,WordPress的媒体文件上传可以看到,大多数都是2MB或者8MB.如果是图片的话可能 ...

  8. POJ3680 Intervals(最小费用最大流)

    选择若干条线段使权值最大,并且点覆盖次数不超过k. 建图如下:vs到0建立容量为k费用为0的边:坐标终点到vt连接一条容量为k费用为0的边:对于每两个相邻坐标连接一条容量为INF费用为0的边:对于线段 ...

  9. 每天一个linux命令---curl

    linux curl是一个利用URL规则在命令行下工作的文件传输工具.详细请参考:http://www.codesky.net/article/201010/170043.html 例如:curl ' ...

  10. 多表头固定demo--html Table

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...