结构体和类的区别以及抽象类和接口的区别

结构体和类最大的区别是在储存空间上

结构体是值类型,存在栈上

而类是引用类型,存在堆上

结构体中有面向对象思想中封装的特性,但是不具备继承和多态的特性

结构体不具备继承特性,所以不能用 protected 访问修饰符

结构体成员变量申明不能指定初始值,而类可以

结构体中不能申明无参构造函数,但是类可以

结构体中不能申明析构函数,但是类可以

结构体需要在构造函数中初始化所有成员变量,而类不用

结构体不能在内部申明和自己一样的结构体变量,而类可以

结构体可以继承接口,因为接口是行为的抽象


如何选择结构体和类

如果想要使用继承和多态时,直接使用类

对象如果是数据集合时,优先考虑结构体,比如位置、坐标等

从值和引用类型的区别上去考虑,如果经常被赋值传递并且改变赋值对象,原对象不想跟着变化时就用结构体,比如坐标、向量、旋转等


抽象类和接口的相同点

都可以被继承

都不能直接实例化

都可以包含方法申明

子类必须实现未实现的方法

都遵循里氏替换原则


抽象类和接口的区别

抽象类中可以有构造函数,接口不行

抽象类只能被单一继承,接口可以被继承多个

抽象类中可以有成员变量,接口不行

抽象类中可以申明成员方法,虚方法,抽象方法,静态方法;接口中只能申明没有实现的抽象方法

抽象类方法可以使用访问修饰符;接口中建议不写,默认为 public


如何选择抽象类和接口

表示对象的用抽象类,表示行为拓展的用接口

不同对象拥有的共同行为,一般用接口来实现

动物是一类对象,我们通常选择抽象类,而呼吸时一个行为,我们一般会选择接口

posted @   cannedmint  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示