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 ...
随机推荐
- from live writer
<body> <div class="pagination"> <a href="#" class="first&quo ...
- nginx禁止ip直接访问
编辑一个noIp.conf放到虚拟目录中 server { listen default; server_name _; rewrite ^ http://www.xxxx.com/; } 其中 ww ...
- \n\t\r代表什么意思
\t水平制表(跳到下一个tab位置)\r回车(将当前位置移到本行开头)\n换行(将当前位置移到下一行行开头)
- [译]ASP.NET 5: New configuration files and containers
原文:http://gunnarpeipman.com/2014/11/asp-net-5-new-configuration-files-and-containers/ ASP.NET vNext提 ...
- AngularJS API之toJson 对象转为JSON
toJson()能把对象序列化为json 方法讲解 这个方法最多支持2个参数: angular.toJson(obj, pretty); obj 是想要转换的对象, pretty 可以调节格式化的样式 ...
- Maven工程中报 Missing artifact jdk.tools:jdk.tools:
jdk.tools:jdk.tools是与JDK一起分发的一个JAR文件,可以如下方式加入到Maven项目中:<dependency> <groupId>jdk.tool ...
- Mac Pro 修改环境变量
参考:Ubuntu 12 修改环境变量 [实战] 把 php.php-fpm.nginx.mysql 的相关命令路径添加到 用户环境变量 $ vim ~/.bash_profile alias ll= ...
- 解决Ckeditor编辑器不显示html实体,自动过滤html的问题
Ckeditor 4.5.4,在编辑的时候,使用源码编辑,当保存内容包含Javascript.Style标签的时候,数据库中有Javascript.Style标签,输入到页面也可以执行,但是我再次编辑 ...
- loadrunner-27796错误寻求解决办法
Action.c(58): Error -27796: Failed to connect to server "www.baidu.com:80": [10048] Addres ...
- java之google style
Google的Java编码规范英文版: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html Google的Java编码规范 ...