抽象类与抽象函数+接口

news2024/11/25 18:39:18

抽象类与抽象函数

什么是抽象方法

抽象方法是没有实现代码的虚方法

抽象方法使用abstract修饰符进行声明,只能在同样声明了abstract的类中使用。

继承了抽象类的子类必须实现抽象类的所有抽象方法。

什么是抽象类

用abstract修饰过的类是抽象类

抽象类无法被实例化

子类如果继承自抽象类,那么子类必须实现abstract类中所有的abstract成员

如果你的父类需要实例化,且需要实现方法,用虚方法。

如果你的父类不需要实例化,也不需要实现方法,用抽象类和抽象方法;

格式实例:

    abstract class Graph
    {
        public abstract void GetArea();
        public abstract void GetPerimeter();
    }
    class Rect : Graph
    {
        public float width;
        public float height;
        public override void GetArea()
        {
            Console.WriteLine("此矩形的面积为:"+(width*height));
        }

        public override void GetPerimeter()
        {
            Console.WriteLine("此矩形的周长为:"+(width+height)*2);
        }
    }
    class Circle : Graph
    {
        public float radius;    
        public override void GetArea()
        {
            float area=(float)Math.PI*radius*radius;
            Console.WriteLine("此圆的面积为:" + area);
        }

        public override void GetPerimeter()
        {
            float perimeter = (float)Math.PI * radius * 2;
            Console.WriteLine("此圆的周长为:" + perimeter);
        }
    }
    class Test1{
        static void Main(string[] args)
        {
            Circle c = new Circle();
            c.radius= 10;

            Rect r= new Rect();
            r.height = 12;
            r.width=6;

            c.GetArea();
            r.GetArea();
            
            c.GetPerimeter();
            r.GetPerimeter();
        }
    }

运行结果为: 

接口 

 接口定义了可由类和结构实现的协定。

接口可以包含方法,属性,事件和索引器

接口不提供所定义的成员的实现代码,仅指定必须由实现接口的类或结果提供的成员,因此接口在声明是不能具体实现,他只能通过及城市了他的类的成员实现。接口是多重继承的,一个接口可以继承另一个接口或者多个接口,一个类可以继承一个或者多个接口。

接口的优势

多继承,可以让类更灵活,并在减少代码重复的情况下降低代码关联性(耦合)

多态:程序可扩展性,节约成本,提高效率。

接口的声明
访问修饰符 interface 接口名{
    属性
    方法
}

接口的声明与类基本一致。

接口的方法和属性均允许实现 。

接口不能有构造,不能有字段。

不能重载运算符。

接口中成员必须为Public。

接口取名,前面必须要加大写的I。

接口的使用
访问修饰符 类名:基类,接口名,接口名{
    属性
    方法
}

继承关系中如果有类必须是第一个。

继承了接口的类必须实现该接口的所有成员。

接口可以继承接口 。

接口的显示实现

当我们的类继承了多个接口,有可能会有重名的成员,这个时候可以使用显示实现来区别不同接口的成员

接口名.成员名{}

该系列专栏为网课课程笔记,仅用于学习参考。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2061309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《机器学习》 决策树 ID3算法

一、什么是决策树? 1、概念 决策树是机器学习中一种常见的分类和回归算法。它基于树状结构的模型,通过对数据进行逐步划分,最终生成一棵决策树来进行预测或分类任务。 在决策树中,每个节点代表一个特征或属性,每个分支…

数据库:数据更新和视图

1 实验目的 (1)掌握SQL语言的数据更新功能: update 语句用于对表进行更新 delete 语句用于对表进行删除 insert 语句用于对表进行插入 (2)掌握对视图的操作: 视图的定义 视图的更新 基于视图的查询 …

總結熱力學_4(完了)

參考: 陈曦<<热力学讲义>>http://ithatron.phys.tsinghua.edu.cn/downloads/thermodynamics.pdf 7 最大功定理 考虑一个与外界隔绝的由几个彼此不处于热平衡、但相互绝热的物体组成的系统。另外还需要一个重物,它不参与热力学过程,但是可以以重力势能的 方式存…

js vscode 关于对象数组的一个bug

数据结构&#xff1a; let address [{label: "北京市",children: []},{label: "天津市",children: []},{label: "上海市",children: []},{label: "重庆市",children: []},{label: "河北省",children: [{label: "石家…

Flink 同步 MySQL 到 Doris

一、前言 使用Apache Flink实现数据同步的ETL&#xff08;抽取、转换、加载&#xff09;过程通常涉及从源系统&#xff08;如数据库、消息队列或文件&#xff09;中抽取数据&#xff0c;进行必要的转换&#xff0c;然后将数据加载到目标系统&#xff08;如另一个数据库…

Spring自动注册-Bean的加载

Spring在进行完xml文件标签解析后,我们如何获取对应的Bean? 核心方法: getBean() Spring三级缓存&循环依赖: 由于单例在Spring容器中只会被创建一次&#xff0c;即&#xff1a;创建出来的单例实例对象就会被缓存到singletonObjects(一级缓存)中。所以&#xff0c;当要获得…

Nginx高级部分

一、web服务基础介绍 Web 服务基础介绍 正常情况下的单次web服务访问流程&#xff1a; Apache 经典的 Web 服务端 Apache起初由美国的伊利诺伊大学香槟分校的国家超级计算机应用中心开发 目前经历了两大版本分别是1.X和2.X 其可以通过编译安装实现特定的功能 1.Apache pr…

<数据集>航拍牧场牛羊识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1021张 标注数量(xml文件个数)&#xff1a;1021 标注数量(txt文件个数)&#xff1a;1021 标注类别数&#xff1a;3 标注类别名称&#xff1a;[cattle, cow, sheep] 序号类别名称图片数框数1cattle29741282cow6740…

网络安全漏洞防护技术原理与应用

网络安全漏洞概述 概念 定义&#xff1a;又称脆弱性&#xff0c;简称漏洞。一般是致使网络信息系统安全策略相冲突的缺陷&#xff08;安全隐患&#xff09; 影响&#xff1a;机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控制性下降、真实性不保等 范围&#xff…

Kerberos认证以及黄金票据白银票据的简单介绍

目录 1. 什么是Kerberos认证2. Kerberos认证流程3. 票据伪造4. 金票和银票的原理5. 金票和银票的区别6. 针对Kerberos的攻击 1. 什么是Kerberos认证 Kerberos是一种网络身份认证的协议&#xff0c;协议设计目的是通过使用秘钥加密技术为客户端/服务器应用程序提供强身份验证&am…

【vue3|第24期】深入了解useRouter:方法、属性与使用示例

日期&#xff1a;2024年8月20日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

安装CUDA、CUDNN、pytorch

2.1 安装CUDA 2.1.1找到CUDA的版本号 2.1.1.1 屏幕的左下角&#xff0c;找到NVIDIA控制面板的图标&#xff0c;如下图所示&#xff1a; 图2.1.1.1 NVIDIA控制面板图标 2.1.1.2 打开NVIDIA控制面板&#xff0c;找到系统信息&#xff0c;如下图所示&#xff1a; 图2.1.1.2 系…

Qt中英文支持

目的 就是想让QT编的软件支持中英文。 情况 1、首先配置项目的pro文件&#xff1a; 这样就会生成相应的翻译配置文件&#xff0c;当前是&#xff1a; translate1_cn.ts&#xff1a;中文的配置文件&#xff0c;因为一般默认就是中文&#xff0c;所以一般中文的翻译文件是不需…

GPT的token是怎么计算的

百花齐放的AI模型 自从ChatGPT横空出世 计算机进入了AI时代 国内也诞生了不少优秀的替代品 讯飞系、通义系、文心等等 国内排名最高的阿里通义 720亿参数的模型Qwen-72B 力压Llama 2等国内外开源大模型 登顶Hugging Face的开源大模型排行榜首 包括C-Eval、CMMLU、Gaok…

electron-vite封装UI级的消息提示

说明 Electron Vite Vue3 Element Plus Electron中写提示有两种方案&#xff1a; 系统级&#xff1a;electron带的dialog相关APIUI级&#xff1a;UI框架内部的提示&#xff0c;如ElMessage、ElMessageBox、ElNotification等 今天来封装一下UI级别的提示 代码 效果图 源…

tomcat利用 nginx 反向代理

利用 nginx 反向代理功能&#xff0c;实现图中的代理功能&#xff0c;将用户请求全部转发至指定的同一个 tomcat 主机 利用 nginx 指令 proxy_pass 可以向后端服务器转发请求报文 , 并且在转发时会保留客户端的请求报文中的 host首部 实现 tomcat 中的负载均衡 动态服务器的…

day6JS-DOM(文档对象模型)

DOM树 DOM 操作 1. 获取元素 1.1 根据id名获取元素 document.getElementById("id名"); 案例&#xff1a; <body><div id"box">div盒子</div><h1>一级标题</h1><script>console.log(document.getElementById(&quo…

软件测试费用怎么算?湖南软件测评公司简析

随着信息技术的迅猛发展&#xff0c;软件在各行各业中的应用日益广泛&#xff0c;软件测试的重要性愈加凸显。特别是对于各种规模的企业&#xff0c;确保软件质量和安全性不仅是提升竞争力的关键因素&#xff0c;更是维护用户信赖的基础。 软件测试作为软件开发过程中的关键环…

IO进程线程8月21日

1&#xff0c;思维导图 2&#xff0c;登录 #ifndef __LOG_H__ #define __LOG_H__ #include<myhead.h> typedef struct {char name[20];char pwd[20]; }str;int regist();int login(); #endif#include"log.h" int login() {char a[20]"\n";str p,s;…

IPC进程间通信方式及网络通信

一、IPC进程间通信方式 1.共享内存&#xff08;最高效的进程间通信方式&#xff09; 其允许两个或多个进程共享一个给定的存储区&#xff0c;这一段存储区可以被两个或以上的进程映射至自己的地址空间中&#xff0c;一个进程写入共享内存的信息&#xff0c;可以被其他使用这个…