抽象方法(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 ...
 
随机推荐
- 解决tsc编译器版本过低问题
			
我们知道,tsc是TypeScript的编译器,可以将TypeScript脚本(.ts文件)编译为JavaScript脚本(.js文件).根据约定,TypeScript脚本文件使用.ts后缀名,Jav ...
 - Mac安装Hadoop
			
软件版本 hadoop3.2.1 一.打开本地ssh登录 # 生成公钥默认 $ ssh-keygen -t rsa -C "robots_wang@163.com" -b 4096 ...
 - BUUCTF-Web方向21-25wp
			
[HCTF 2018]admin 打开环境,有三处提示,一个跳转链接,一个登录注册,一个提示不是admin 点击hctf,无法访问 注册个账号,依旧无法查看,看来需要admin账号 弱口令 爆破密码 ...
 - 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
			
你好呀,我是歪歪. 事情是这样的,前几天有一个读者给我发消息,说他面试的时候遇到一个奇形怪状的面试题. 歪师傅纵横面试界多年,最喜欢的是奇形怪状的面试题. 可以说是见过大场面的人,所以让他描述一下具体 ...
 - 互联网和DeepSeak时代,获取信息这么容易,为什么我们还是学习不好?
			
因为人性倾向于立即获得享受,而不是延迟获得享受,然而,学习就是延迟获得享受,所以,学习,其实是反人性的一种活动. 学习,特别是对知识的深入学习,其实需要付出大量的时间和精力,这个过程中必然伴随着各种各 ...
 - Python 脚本编写指南:从框架到实践
			
一.引言 Python 作为一种强大且易于学习的编程语言,在各个领域都有着广泛的应用.编写 Python 脚本是实现各种功能和任务的常见方式. 二.Python 脚本框架的基本组成部分 导入必要的模块 ...
 - 青岛oj集训1
			
2025/3/4 内容:有向无环图(DAG) 优点:DAG有很多良好性质 拓扑排序 用处:可以根据拓扑序进行dp 这次计算所用的所有边的权值都是有计算过的 一张DAG图肯定有拓扑序(bfs序,dfs序 ...
 - DeepSeek 全套资料pdf合集免费下载(持续更新)
			
有很多朋友都关注DeepSeek相关使用的教程资料,本站也一直持续分享DeepSeek 学习相关的pdf资料,由于比较零散,这篇文章主要就是做一个汇总,并且持续更新,让大家可以及时获取下载最新的相关D ...
 - go 编译约束//go:build dev //+build
			
前言 在真实环境中,我们可能需要为不同的编译环境编写不同的 Go 代码,所以需要做构建约束. 比如:syscall.NewLazyDLL("test.dll") 加载 dll 的程 ...
 - laravel-admin php artisan admin:install报错问题解决办法
			
问题描述:根据laravel-admin官方文档安装步骤,执行:php artisan admin:install 安装时报错. 其实是数据库创建特殊字符过长问题,laravel 5.4 改变了默认的 ...