抽象类和接口的异同及实例解析
1.windwos terminal 主题美化 包括WSL和其他终端命令行2.win11+cuda11.2+cudnn+Tensorflow-GPU 环境配置3.win11+wls2+ubuntu2004配置cuda+cudnn+pytorch4.xshell7 无法打开 提示"要继续使用此程序,您必须应用最新的更新或使用新版本" 解决方案5.wls2 ubuntu22 kind k8s 配置记录6.wsl2安装与配置7.PVE UPS NUT配置 自动关机8.centos-stream-9 centos9 配置国内源 阿里云源9.群晖gitlab备份迁移10.国内网站recaptcha无法使用的解决办法11.[每日小技巧] vscode配置vue项目基础12.Windows11 AirPods /AirPods Pro 声音小解决方案13.windows端口占用快速查询解决方法14.解决github无法连接错误 OpenSSL SSL_connect: Connection was reset in connection to github.com:44315.[ABP教程]第七章 作者:数据库集成16.[ABP教程]第六章 作者:领域层17.[ABP教程]第五章 授权18.[ABP教程]第四章 集成测试19.[ABP教程]第三章 创建、更新和删除图书20.[ABP教程]第二章 图书列表页面21.[ABP教程]第一章 创建服务端22.[Skill] git下载助手23.[Abp]Abp 新手入门随记24.[Skill] 记一次vue项目热更新失败案例25.[Skill]加速npm与yarn还原26.解决黑群晖"抱歉,您所指定的页面不存在"-记一次黑群晖修复案例27.如何下载youtube的视频?28.[新手教程]申请https泛域名解析29.docker frps 内网穿透容器化服务30.docker nginx 自定义配置容器31.asp.net core 学习笔记32.gitlab git仓库地址修改后更新方法33.树莓派(4B)新手入门教程34.Docker-MsSqlServer和安装版本异同35.Win Task 任务管理器 批量杀进程方法36.Win Docker 安装C盘清理方法之一37.中移动ipv6-老毛子固件获取ipv6设置38.win7-win10 禁用IPV6临时地址39.辅助调用函数【call,apply,bind】40.Unraid修改docker镜像地址&默认启动41.docker基本入门知识-小白向42.[不止于代码]Unraid基本使用速记43.Dockerfile文件说明44.Git之pull,fetch差别45.ES6+Webpack+Babel基本环境搭建
46.抽象类和接口的异同及实例解析
47.KVM与OpenVZ架构的区别48.关闭win10 defender的方法集锦49.ChromeDriver与Chrome版本对应表50.Hexo-Next-多地同步丢失解决(WARN No layout: index.html)51.修改vs模板添加版权注释信息52.Easyui中form表单验证事件不通过处理方法53.最简化版本-Centos7 配置.Net Core 及Jexus服务器54.常用开发中使用到的作图工具(开发向)55.Git 常用指令备注56.记一次 未能加载文件或程序集“”或它的某一个依赖项。试图加载格式不正确的程序 错误解决方案57.截图工具小结58.更优雅的处理数据-linqjs59.解决未安装Sql Server 配置数据库别名60.windows添加右键菜单-此处运行CMD61.记一次微信开发安卓访问阿里云服务器慢处理方案62.Hexo发布到Github丢失readme和CNAME解决方案63.Git之别名配置64.Github博客多地同步文章65.Github博客 自定义域名66.Github 搭建个人博客67.(转载)开源许可证教程68.小米路由mini刷 改华硕[N14U N54U]5G 2G的7620老毛子Padavan固件(私人云储存 aria2 QOS)69.小米路由mini刷不死breed70.小米路由mini开启ssh71.比特币是什么?72.IIS发布网站出现拒绝访问的错误分析73.公众平台服务号、订阅号、企业微信、小程序的相关说明与具体类比较#
-
允许(但不要求)抽象类包含抽象成员。
-
抽象类不能被密封。
与接口比较#
抽象类表示该类中可能已经有一些方法的具体定义,但是接口就仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不关心具体细节。
接口是引用类型的,和抽象类的相似之处有三点:
-
不能实例化;
-
包含未实现的方法声明;
抽象类与接口紧密相关。然而接口又比抽象类更抽象,这主要体现在它们的差别上:
-
类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
-
抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。
-
抽象类是对象的抽象,然而接口是一种行为规范。
实例:
1 #region 星探-美女 2 /// <summary> 3 /// 好身材美女 4 /// </summary> 5 public interface IGoodBodyGirl 6 { 7 /// <summary> 8 /// 好面孔 9 /// </summary> 10 void NiceFace(); 11 /// <summary> 12 /// 好身材 13 /// </summary> 14 void NiceFigure(); 15 } 16 /// <summary> 17 /// 好气质美女 18 /// </summary> 19 public interface IGreatTemperamentGirl 20 { 21 /// <summary> 22 /// 好气质 23 /// </summary> 24 void GreatTemperament(); 25 } 26 27 public interface IPettyGirl 28 { 29 /// <summary> 30 /// 好面孔 31 /// </summary> 32 void NiceFace(); 33 /// <summary> 34 /// 好身材 35 /// </summary> 36 void NiceFigure(); 37 /// <summary> 38 /// 好气质 39 /// </summary> 40 void GreatTemperament(); 41 } 42 43 public class PettyGirlNew : IPettyGirl 44 { 45 private string name { get; set; } 46 public PettyGirlNew(string name) 47 { 48 this.name = name; 49 } 50 public void GreatTemperament() 51 { 52 Console.WriteLine($"{this.name},很有气质!"); 53 } 54 55 public void NiceFace() 56 { 57 Console.WriteLine($"{this.name},脸蛋很漂亮!"); 58 } 59 60 public void NiceFigure() 61 { 62 Console.WriteLine($"{this.name},身材很棒!"); 63 } 64 } 65 66 public class PettyGirl : IGoodBodyGirl, IGreatTemperamentGirl 67 { 68 public string name { get; set; } 69 public PettyGirl(string name) 70 { 71 this.name = name; 72 } 73 public void GreatTemperament() 74 { 75 Console.WriteLine($"{this.name},很有气质!"); 76 } 77 78 public void NiceFace() 79 { 80 Console.WriteLine($"{this.name},脸蛋很漂亮!"); 81 } 82 83 public void NiceFigure() 84 { 85 Console.WriteLine($"{this.name},身材很棒!"); 86 } 87 } 88 89 public abstract class AbstractSearcher 90 { 91 public IPettyGirl pettyGirl { get; set; } 92 public AbstractSearcher(IPettyGirl pettyGirl) 93 { 94 this.pettyGirl = pettyGirl; 95 } 96 public abstract void Show(); 97 } 98 99 public class Searcher : AbstractSearcher 100 { 101 public Searcher(IPettyGirl pettyGirl) : base(pettyGirl) 102 { 103 } 104 public override void Show() 105 { 106 Console.WriteLine($"美女信息如下:"); 107 base.pettyGirl.NiceFace(); 108 base.pettyGirl.GreatTemperament(); 109 base.pettyGirl.NiceFigure(); 110 } 111 } 112 113 #endregion
作者: LandWind
出处:https://www.cnblogs.com/LandWind/p/10001064.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下