结构体和类的区别以及抽象类和接口的区别
结构体和类最大的区别是在储存空间上
结构体是值类型,存在栈上
而类是引用类型,存在堆上
结构体中有面向对象思想中封装的特性,但是不具备继承和多态的特性
结构体不具备继承特性,所以不能用 protected
访问修饰符
结构体成员变量申明不能指定初始值,而类可以
结构体中不能申明无参构造函数,但是类可以
结构体中不能申明析构函数,但是类可以
结构体需要在构造函数中初始化所有成员变量,而类不用
结构体不能在内部申明和自己一样的结构体变量,而类可以
结构体可以继承接口,因为接口是行为的抽象
如何选择结构体和类
如果想要使用继承和多态时,直接使用类
对象如果是数据集合时,优先考虑结构体,比如位置、坐标等
从值和引用类型的区别上去考虑,如果经常被赋值传递并且改变赋值对象,原对象不想跟着变化时就用结构体,比如坐标、向量、旋转等
抽象类和接口的相同点
都可以被继承
都不能直接实例化
都可以包含方法申明
子类必须实现未实现的方法
都遵循里氏替换原则
抽象类和接口的区别
抽象类中可以有构造函数,接口不行
抽象类只能被单一继承,接口可以被继承多个
抽象类中可以有成员变量,接口不行
抽象类中可以申明成员方法,虚方法,抽象方法,静态方法;接口中只能申明没有实现的抽象方法
抽象类方法可以使用访问修饰符;接口中建议不写,默认为 public
如何选择抽象类和接口
表示对象的用抽象类,表示行为拓展的用接口
不同对象拥有的共同行为,一般用接口来实现
动物是一类对象,我们通常选择抽象类,而呼吸时一个行为,我们一般会选择接口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)