抽象方法(abstract)、虚方法(virtual)及接口(interface)
抽象方法(abstract)、虚方法(virtual)及接口(interface)
抽象方法(abstract)
定义:abstract关键词标记的方法——抽象方法
特征:
- 抽象方法只能定义在抽象类里
- 没有方法体,只能通过子类重写实现功能
- 不能被所在的类直接调用,因为抽象类不能被实例化
- 抽象类的子类必须用override重写抽象类里的抽象方法(可以说抽象方法的目的就是为了重写)
- 抽象方法不能说private私有的(因为要被继承)
抽象类里可以拥有其他非抽象方法(普通方法、虚方法)
///抽象类
public abstract class AbsParent
{
///抽象方法
public abstract void AbsTest();
}
虚方法(virtual)
关键字virtual之后,会把方法定义为虚方法
特征:
- 可以定义在普通类或者抽象类里
- 子类不一定非要重写(因为它有方法体能实现功能了)
- 虚方法重写(派生)过的方法,还能继续(被子类的子类)派生(重写)
class A
{
public virtual void MethodA()
{
Console.WriteLine("Virtual Method A");
}
}
多层派生
///父类
public abstract class AbsParent
{
///抽象方法
public abstract void AbsTest();
}
//子类
public class AbsChild: AbsParent
{
public override void AbsTest()
{
//实现抽象类
//无法使用base.AbsTest()
}
}
//孙子类
public class AbsGroundSun : AbsChild
{
public override void AbsTest()
{
//这里可以使用base了,因为AbsChild已经实现了方法主体
base.AbsTest();
}
}
接口类(interface)
- 抽象类是单继承的,接口可以多继承
- 抽象类里面除了抽象方法,还可以写普通方法,虚方法,静态方法
- 接口只能写规范,不能写方法主体,也不能写别的方法
抽象类和接口的选择
功能侧重
抽象类:(父类只有一个) 继承+约束: 主要是继承,约束是副业 is a---抽象
类表述的对象。抽象类里可以没有抽象方法
接口: (接口可以多个) 只是做约束 can do,就可以跨不同类型 ----接口表
述的是行为,以及规则
选型
C#8.0后,接口允许有默认实现,会改变很多认知
选择还是以:
- 抽象类表述的对象
- 接口表述的是行为和规则
- 更多时候,选择接口就对了,除非有代码想复用(值得商榷)
抽象方法(abstract)、虚方法(virtual)及接口(interface)的更多相关文章
- 虚方法(virtual)和抽象方法(abstract)的和接口(interface)的区别
虚方法(virtual)和抽象方法(abstract)的区别 2017年06月15日 13:41:26 阅读数:65 注:本文转载自 http://www.cnblogs.com/michaelxu/ ...
- 虚方法virtual、抽象方法abstract、接口interface区别
接口.抽象类.抽象方法.虚方法: 这四个名词时非常容易混淆的: 首先说一下接口 与抽象类 的异同: 相同点: 1.他们都不能实例化自己,也就是说都是用来被继承的. 2.抽象类中的抽象方法和接口方法一样 ...
- 抽象方法(abstract method) 和 虚方法 (virtual method), 重载(overload) 和 重写(override)的区别于联系
1. 抽象方法 (abstract method) 在抽象类中,可以存在没有实现的方法,只是该方法必须声明为abstract抽象方法. 在继承此抽象类的类中,通过给方法加上override关键字来实现 ...
- Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息
Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息 http://www.cnblogs.com/zhwx/archive/2012/08/28/266055 ...
- C#中的抽象方法,虚方法,接口之间的对比
1.首先来看一看抽象类 抽象类是特殊的类,不能够被实例化:具有类的其他特性:抽象方法只能声明于抽象类中,且不包含任何实现 (就是不能有方法体),派生类也就是子类必须对其进行重写.另外,抽象类可以派生自 ...
- C#通过完整的例子,Get常用的2个套路,理解抽象方法,虚方法,接口,事件
一.理解:抽象方法,虚方法,接口,事件 描述: 1.定义一个抽象父类"People": 要求: 1>3个属性:名字,性别,年龄: 2>一个普通方法"说话&qu ...
- C#中抽象方法与虚方法的区别详解及示例
1. 抽象方法与虚方法的区别 先说两者最大的区别:抽象方法是需要子类去实现的.虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求.因为抽象类无法实例化,所以抽象方法没有办法被调用,也就 ...
- JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展
JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来 ...
- C#中抽象方法与虚方法的区别
一.抽象方法:只在抽象类中定义,方法修饰符不能使用private,virtual,static. 抽象方法如下示: public abstract class People //声明一个抽象类 { ...
- C#中抽象方法与虚方法的区别(转)
C#中抽象方法与虚方法的区别 一.抽象方法:只在抽象类中定义,方法修饰符不能使用private,virtual,static. 抽象方法如下示: public abstract class Peo ...
随机推荐
- ISA-L库调研
本文分享自天翼云开发者社区<ISA-L库调研>,作者:何****尔 1.Intel SIMD指令集 SIMD(single instruction multiple data)单指令多数据 ...
- Django项目实战:创建和迁移数据库
Django项目实战:创建和迁移数据库 一.配置数据库 Django默认使用SQLite数据库,但你也可以选择其他数据库如MySQL.PostgreSQL等.在./settings.py文件中,你可以 ...
- FreeSql学习笔记——8.数据返回类型
前言 FreeSql数据返回格式比较丰富,包括单条.列表.导航属性数据.指定字段.Dto等:可以有效的减少代码量,减少字段复制等操作: 前面的查询已经用到了日常基本需要用到的数据格式,本篇是常 ...
- autohue.js:让你的图片和背景融为一体,绝了!
需求 先来看这样一个场景,拿一个网站举例 这里有一个常见的网站 banner 图容器,大小为为 1910*560 ,看起来背景图完美的充满了宽度,但是图片原始大小时,却是: 它的宽度只有 1440 , ...
- K230学习记录
K230学习记录 参考自: # 立创·庐山派-K230-CanMV开发板资料与相关扩展板软硬件资料官网全部开源 # 开发板官网:www.lckfb.com # 技术支持常驻论坛,任何技术问题欢迎随时交 ...
- Deepin搭建git仓库服务gogs,debian也可用
我尝试了gitlab.gitblit搭建均失败,deepin版本20.03 1. 步骤 访问gogs官网下载&安装页面 数据库(选择以下一项): MySQL:版本 >= 5.7. Pos ...
- 软件工程: SDLC V模型
V型 V-model 代表一个开发过程,可以被认为是瀑布模型的扩展,是更通用的 V-model 的一个例子.不是以线性方式向下移动,而是在编码阶段之后向上弯曲工艺步骤,以形成典型的 V 形.V 模型展 ...
- 他来了,为大模型量身定制的响应式编程范式(1) —— 从接入 DeepSeek 开始吧
哒哒哒,他来了! 今天我们要介绍一种新型的 Java 响应式大模型编程范式 -- FEL.你可能听说过 langchain,那么你暂且可以把 FEL 看作是 Java 版本的 langchain. 话 ...
- 基于融合语义信息改进的内容推荐算法。Improved content recommendation algorithm integrating semantic information
引言 路漫漫其修远兮,吾将上下而求索.每天一篇论文,做更好的自己. 本文读的这篇论文为发表于2023年5月28日的一篇名为<基于融合语义信息改进的内容推荐算法>(基于融合语义信息改进的内容 ...
- git上传大文件!git push 报错 ! [remote rejected] main -> main (pre-receive hook declined) error_ failed to push some refs to 'xxx
前言 今天在用git push项目的时候,出现了一个报错,记录一下解决方案,以后报同样的错误可以回来看. 错误信息 下面是git push的详细报错信息: 20866@DESKTOP-7R0VL04 ...