C#之类的继承、抽象类和虚方法
类的继承:
写电池的基类:包含条码和箱体码两个字段,含有两个参数的构造函数
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#之类的继承、抽象类和虚方法的更多相关文章
- JavaScript实现抽象类与虚方法(六)
一:什么是js抽象类与虚方法 虚函数是类成员中的概念,是只做了一个声明而未实现的方法,具有虚函数的类就称之为抽象类,这些虚函数在派生类中才被实现.抽象类是不能实例化的,因为其中的虚函数并不是一个完整的 ...
- c#多态之抽象类与虚方法的异同点~
多态之抽象类与虚方法的相似点及不同点 : 不同点 1.方法关键字不一样 虚方法的方法关键字是:virtual. 抽象类的方法关键词是:abstract 2.基类的方法是否有方法体/实现 虚方法的方法: ...
- 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)
9.多态 Ploy的意思就是多于一种形式.在文章开始,方法那一章节就已经接触到了多态.多个方法名称相同,而参数不同,这就是多态的一种. 方法重载和方法覆盖就是用在了多态.多态有2中类型,一种是编译时多 ...
- C#之抽象类、虚方法、重写、接口、密封类
前言 学了这么长时间的C#,我想说对于这个东东还是不是特别了解它,以至于让我频频郁闷.每次敲代码的时候都没有一种随心所欲的感觉.所以不得不在网上搜集一些资料,look 了 look~ 内容 ...
- 抽象类和虚方法、base关键字
微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/abstract ...
- C++类继承中的虚方法
#include <bits/stdc++.h> using namespace std; class A { public: void Show() { cout << &q ...
- C#.NET里面抽象类,接口,虚方法
1抽象类 (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明 ...
- C#通过完整的例子,Get常用的2个套路,理解抽象方法,虚方法,接口,事件
一.理解:抽象方法,虚方法,接口,事件 描述: 1.定义一个抽象父类"People": 要求: 1>3个属性:名字,性别,年龄: 2>一个普通方法"说话&qu ...
- C# 虚方法、抽象方法
一.虚方法(virtual) 作用:当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法. 示例: class Person { public virtual void XXX() { Con ...
随机推荐
- Java多线程编程核心技术--定时器
Timer类主要负责计划任务,也就是在指定的时间开始执行某一个任务. 方法schedule(TimerTask task, Date time) public class Task { private ...
- 使用Struts 2框架实现文件下载
从服务器发送一个文件到浏览器需要以下几个步骤 把HTTP响应里的ContentType标头设置为被下载文件的内容类型.ContentType标头的作用是表明数据包里的数据是什么类型, 它由一个多媒体类 ...
- 工作中一个简单的shell程序
下面是工作中用到的链接数据库的shell程序. #!/bin/bash ] ; then echo "prase is wrong ,please check first" exi ...
- [译]Mongoose指南 - 中间件
中间件是一些函数, 当document发生init, validate, save和remove方法的时候中间件发生. 中间件都是document级别的不是model级别的. 下面讲讲两种中间件pre ...
- Nginx如何隐藏index.html
我要隐藏目录下的index.html,修改Nginux配置如下: 1.修改文档顺序 index index.html index.php 2.开启目录流量 在server或location 段里添加 ...
- windows系统添加删除用户命令!
参考:net help usernet help group Net user添加或修改用户帐户或者显示用户帐户信息. 语法net user [UserName [Pa ...
- Hadoop之Hive 安装_(hadoop 集群)
Hive mysql的metastore安装准备(***掌握***) 在nameNode1机子上实践: 把hive-0.12.0.tar.gz解压到/itcast/ # tar -zxvf hive- ...
- Mac Pro 安装 Sublime Text 2.0.2,个性化设置,主题 和 插件 收藏
1.到官网下载安装包 http://www.sublimetext.com/2 2.附注册码一枚 ----- BEGIN LICENSE ----- Andrew Weber Single User ...
- 第12天 android studio
1. http://jingyan.baidu.com/article/215817f7888dc21eda14230d.html Gradle DSL method not found:‘andro ...
- centos systemctl指令
# systemctl #输出已激活单元 # systemctl list-units #输出已激活单元 # systemctl --failed #输出运行失败的单元 # systemctl lis ...