每日一道面试题之普通类和抽象类有哪些区别?

简介: 每日一道面试题之普通类和抽象类有哪些区别?

1:有抽象方法的类一定是抽象类:

首先我们先来解释一下什么是抽象类,在面向对象的概念中,所有的对象都是通过类来描述并创建的,但是有一种“特殊”的类,并不能用完整的信息来描述一个具体的对象,这样的类就是抽象类,在定义抽象类时,需要使用abstract关键字进行修饰,并且类体中至少包含一个抽象方法,其余内容和普通类一样,也可以定义普通常量,普通方法等,由于抽象类必须满足至少包含一个抽象方法,因此有抽象方法的类一定是抽象类。


2:抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类:

原因是:对于抽象类的子类,如果它没有实现抽象类中的所有方法,那么它必然包含抽象方法,它满足至少包含一个抽象方法,因此该类就是抽象类


3:抽象类不能被实例化:

我们知道类是对对象的具体描述,那么类可以相当于图纸,而对象可以相当于产品,抽象类不具体原因是它没有方法体或者说提供的成员不足以生成一个具体对象,拿生活实例举例,我们可以实例化出一个苹果,一个香蕉…,但是我们不能实例化出水果,因为水果是不具体的。


从java的角度分析,我们都知道java是面向对象的程序设计,如果我们想实现某个功能,那么功能中的方法需要通过对象去调用,而对象是什么呢? 对象就是类的实例,所有的对象都是类的实例,而抽象类无法生成一个具体的对象,因此抽象类是不能被实例化的。


其次我们还考虑到内存问题:对象进行实例化的时候,关键字new向Java申请内存,这个类的成员(成员变量,成员方法)会被保存到内存中,而抽象类没有具体的成员,因此没有办法准确的分配内存。


4:抽象类可以有抽象方法,但该抽象方法只需申明,无须实现:

首先先来解释一下什么是抽象方法,抽象方法是一种“特殊”的方法,该方法只有方法的定义部分(只有方法头)而没有方法的实现部分(没有方法体),在访问权限和返回类型之间需要用abstract关键字进行修饰


那么它为什么无须进行实现呢?原因是:**抽象类一般作为父类,在抽象类中定义抽象方法,并交给抽象类的子类去实现抽象方法,也就是说定义并完善某个具体对象的描述,我们是通过抽象类的各个子类去实现的,**比如将水果作为一个抽象类,其中可以包含一些抽象方法来描述其外观,口感,特点…,但对于具体的水果来说,并不是完全相同的,因此需要各自取实现抽象方法来完成自身不同的描述。


5:抽象方法不能声明为静态、不能被static、final修饰:

原因是:首先我们先来说说为什么抽象方法不能被final修饰,我们知道如果一个方法被final修饰,那么这个方法就只能被继承而不能被修改,但抽象方法是要被子类所覆盖的,如果仅仅是继承抽象方法,那么则毫无意义。


那么它为什么不能被static修饰呢?**由于被static修饰的方法属于类,该方法还是类的东西,而不是用来给子类继承的,**如果我们把类比作房子,那么被static修饰的方法就是房子中的一面墙,而抽象方法则可以为房子中的一张白纸,一个桌子等等,墙是没有办法通过继承而迁移的,但桌子,白纸等等,可通过继承将其进行覆盖等操作,抽象方法的存在本身就是为了通过继承和覆盖去完善某个具体对象的描述,如果使用static修饰抽象方法,则会导致该抽象方法无法被继承,那么也就失去了存在的意义。

相关文章
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
50 4
|
2月前
|
安全 Java 应用服务中间件
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
什么是类加载器,类加载器有哪些;什么是双亲委派模型,JVM为什么采用双亲委派机制,打破双亲委派机制;类装载的执行过程
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
1月前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
20 1
|
1月前
|
编译器
经典面试题:变量的声明和定义有什么区别
在编程领域,变量的“声明”与“定义”是经典面试题之一。声明告诉编译器一个变量的存在,但不分配内存,通常包含变量类型和名称;而定义则为变量分配内存空间,一个变量必须至少被定义一次。简而言之,声明是告知变量形式,定义则是实际创建变量并准备使用。
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
111 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
1月前
|
前端开发 小程序 JavaScript
面试官:px、em、rem、vw、rpx 之间有什么区别?
面试官:px、em、rem、vw、rpx 之间有什么区别?
38 0
|
2月前
|
Java 关系型数据库 MySQL
面试官:GROUP BY和DISTINCT有什么区别?
面试官:GROUP BY和DISTINCT有什么区别?
89 0
面试官:GROUP BY和DISTINCT有什么区别?
|
3月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
8天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?