抽象方法(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 ...
随机推荐
- 点赞!TeleDB入选2024大数据星河案例!
12月18日,由中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织的2024大数据"星河"案例入围名单正式发布,天翼云科技有限公司携手中 ...
- 独“数”一帜 双证加冕!TeleDB亮相可信数据库发展大会
近日,2024可信数据库发展大会在北京召开,主题为"自主.创新.引领".大会重磅发布多项中国信通院及中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)在数据库领域最 ...
- 任务调度器Azkaban(Azkaban环境部署)
文章链接:https://www.cnblogs.com/liugp/p/16273966.html
- Java学习记录01
营销核心 营销核心是让利,外围是怎么去让利,三环是公共平台 策略模式学习 意图:定义一系列方法将其封装,并且相互可以替代 目的:解决if-else带来的复杂性和难以维护性 关键实现:多个方法类实现同一 ...
- MOS管的寄生电容
我们经常看到,在电源电路中,功率MOS管的G极经常会串联一个小电阻,几欧姆到几十欧姆不等,那么这个电阻用什么作用呢? 这个电阻的作用有2个作用:限制G极电流,抑制振荡. 限制G极电流MOS管是由电压驱 ...
- 探秘Transformer系列之(6)--- token
探秘Transformer系列之(6)--- token 0x00 概述 语言是人类特有的概念.作为一个抽象符号,人是可以理解每个语言单词的意义的,但是现在的NLP语言模型无法直接的从感知中抽象出每个 ...
- Azure Databricks - [02] 常用SQL
查看当前所在catalog:select current_catalog(); 创建catalog:create catalog if not exists harley_test; 创建表 crea ...
- halcon中是怎么实现半导体/Led中的GoldenDie的检测方法的 基于局部可变形模板匹配 variation_model模型
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/18739196 这篇简单介绍一下halcon中的print_check_single_chars ...
- idea中启动web、jsp项目
1. idea打开项目 选择要打开的项目的根目录 2. 项目配置 配置jdk modules配置 添加web 添加依赖 删除爆红的依赖 添加依赖目录或者jar 配置web.xml 配置lib 如果没有 ...
- Echarts与Vue3中获取DOM节点可能出现的异常错误
useTemplateRef 的简单介绍 官方:返回一个浅层 ref,其值将与模板中的具有匹配 ref attribute 的元素或组件同步. 参数匹配机制:useTemplateRe的参数需与模板 ...