代码下载地址

类的继承:

写电池的基类:包含条码和箱体码两个字段,含有两个参数的构造函数

 class Battery
{
public string _barCode;
public string _boxCode; public Battery(string barcode, string boxcode)
{
this._barCode = barcode;
this._boxCode = boxcode;
} public void ShowInformation()
{
Console.WriteLine("该电池的电池码是{0},箱体码是{1}", this._barCode, this._boxCode);
}
}

类WX27继承Battery基类,添加字段_voltage,并重写构造函数和方法:

 class WX27 : Battery
{
public double _voltage;
public WX27(string barcode,string boxcode ,double voltage):base(barcode,boxcode)
{
this._voltage = voltage;
} public new void ShowInformation()
{
Console.WriteLine("该电池的电池码是{0},箱体码是{1},电压是{2}", this._barCode, this._boxCode, this._voltage);
} public void ShowVoltage()
{
Console.WriteLine("万向27的电压为{0}", _voltage);
}
}

测试效果:

 WX27 WX = new WX27("", "dsfdsf",3.33);
WX.ShowInformation();
WX.ShowVoltage(); //output-->(不重写ShowInformation)
//该电池的电池码是123456,箱体码是dsfdsf
//万向27的电压为3.33 //output-->(重写ShowInformation)
//该电池的电池码是123456,箱体码是dsfdsf,电压是3.33
//万向27的电压为3.33

抽象类

Car基类,其中的方法不需要提供方法的具体实现,具体的方法在继承的子类体现。

     abstract class Car
{
abstract public void Run();
}

BYD类继承Car类,需要重写抽象方法

     class BYD : Car
{
public override void Run()
{
Console.WriteLine("BYD汽车可以跑高速!");
}
}

WJ类继承Car类,需要重写抽象方法

     class WJ : Car
{
public override void Run()
{
Console.WriteLine("玩具汽车不能跑高速!");
}
}

测试效果:

 Car c = new WJ();
c.Run();
c = new BYD();
c.Run(); //output-->
//玩具汽车不能跑高速
//BYD汽车可以跑高速!

 虚方法:

构建基类Car,不同于之前的是多了关键字Virtual,如果子类不重写方法Run,则默认调用基类的方法,重写了则调用子类的方法

与抽象类的区别是,虚方法中基类依然提供了具体的方法,可以选择是否重写。

     class Car
{
public virtual void Run()
{
Console.WriteLine("车可以跑!");
}
}

子类BYD继承Car类

     class BYD : Car
{
public override void Run()
{
Console.WriteLine("BYD汽车不仅可以跑,还可以上高速!");
}
}

测试效果:

 Car c = new Car();
c.Run();
c = new BYD();
c.Run(); //output-->
//车可以跑!
//BYD汽车不仅可以跑,还可以上高速!

总结:

对于使用上,类的继承可以让子类拥有数据自己的字段,属性及方法,不同的子类在这一块是可以不一样的。

而类的多态(抽象类、虚方法及接口),则允许使用父类初始化一个子类,用父类直接调用子类的方法,子类的具体实现可以不一样。

继承的子类也可以用基类初始化,但对于子类特有的方法,父类必须通过里氏转化才能调用这些方法。

C#之类的继承、抽象类和虚方法的更多相关文章

  1. JavaScript实现抽象类与虚方法(六)

    一:什么是js抽象类与虚方法 虚函数是类成员中的概念,是只做了一个声明而未实现的方法,具有虚函数的类就称之为抽象类,这些虚函数在派生类中才被实现.抽象类是不能实例化的,因为其中的虚函数并不是一个完整的 ...

  2. c#多态之抽象类与虚方法的异同点~

    多态之抽象类与虚方法的相似点及不同点 : 不同点 1.方法关键字不一样 虚方法的方法关键字是:virtual. 抽象类的方法关键词是:abstract 2.基类的方法是否有方法体/实现 虚方法的方法: ...

  3. 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)

    9.多态 Ploy的意思就是多于一种形式.在文章开始,方法那一章节就已经接触到了多态.多个方法名称相同,而参数不同,这就是多态的一种. 方法重载和方法覆盖就是用在了多态.多态有2中类型,一种是编译时多 ...

  4. C#之抽象类、虚方法、重写、接口、密封类

    前言    学了这么长时间的C#,我想说对于这个东东还是不是特别了解它,以至于让我频频郁闷.每次敲代码的时候都没有一种随心所欲的感觉.所以不得不在网上搜集一些资料,look 了 look~ 内容   ...

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

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

  6. C++类继承中的虚方法

    #include <bits/stdc++.h> using namespace std; class A { public: void Show() { cout << &q ...

  7. C#.NET里面抽象类,接口,虚方法

    1抽象类 (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明 ...

  8. C#通过完整的例子,Get常用的2个套路,理解抽象方法,虚方法,接口,事件

    一.理解:抽象方法,虚方法,接口,事件 描述: 1.定义一个抽象父类"People": 要求: 1>3个属性:名字,性别,年龄: 2>一个普通方法"说话&qu ...

  9. C# 虚方法、抽象方法

    一.虚方法(virtual) 作用:当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法. 示例: class Person { public virtual void XXX() { Con ...

随机推荐

  1. vim:用vim修改文件编码为utf-8

    命令是 :set fileencoding=utf-8如果用vim打开文件时里面有乱码,可能用上面的命令修改文件后无法保存.可以用其他软件打开文件,然后把内容拷贝到vim里再保存就行了.

  2. MySQL注入

    SQL Injection Tutorial by Marezzi (MySQL) SQL注入教程由Marezzi(MySQL的) In this tutorial i will describe h ...

  3. Python之路【第十二篇】前端之js&dome&jQuery

    JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  4. java获取指定路径下的指定文件/java.io.File.listFiles(FilenameFilter filter)

    java.io.File.listFiles(FilenameFilter filter) 返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的文件和目录. 声明 以下是java.io. ...

  5. Linux jdk1.7安装与 jdk1.6卸载

    昨天安装zookeeper时需要java环境,也就是安装jdk    安装完jdk1.7后,配置好环境变量, vim ~/.bashrc       JAVA_HOME=安装路径 export PAT ...

  6. for while (list each)的用法

    each是返回数组 指针当前指向的 元素的 索引和值: 索引有四个值: 0, 1, key, value. 0和key是一样的, 1和value是一样的 但是each只是将数组指针 向前移动 一步, ...

  7. setTimeout和setInterval的各自使用场景

    默认的 setTimeout 只执行一次, 清除用clearTimeout setInterval 每间隔指定的时间, 就执行一次, 清除用clearInterval 但是, setTimeout也可 ...

  8. C生成随机数,奇葩问题

    今天需要生成一个随机数,奇怪的问题发生了. #include <stdio.h> #include <stdlib.h> #include <time.h> #de ...

  9. 11个很棒的 jQuery 图表库

    如果你曾经使用过任何类型的数据,你应该知道阅读一排排数据的痛苦.通过所有这些数据弄清楚他们的意思是非常不容易的.可视化对于解决这个问题起到了重要的作用.可视化降低了数据阅读的难度,帮助决策者获得可操作 ...

  10. 【AngularJS】—— 1 初识AngularJs

    怀着激动与忐忑的心情,开始了学习AngularJS的旅程,很久之前就听说了这个前端框架,但是由于自己一直没有从事相关的工作,因此也没有进行学习.这次正好学习AngularJS,直接复习一下前端的知识. ...