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

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

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

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


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

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


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

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


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


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


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

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


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


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

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


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

相关文章
|
11天前
|
存储 调度 C++
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
41 1
|
3天前
|
缓存 Java 数据库连接
java面试题目 强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?
【6月更文挑战第28天】在 Java 中,理解和正确使用各种引用类型(强引用、软引用、弱引用、幻象引用)对有效的内存管理和垃圾回收至关重要。下面我们详细解读这些引用类型的区别及其具体使用场景。
12 3
|
20天前
|
存储 安全 算法
Java基础19-一文搞懂Java集合类框架,以及常见面试题(二)
Java基础19-一文搞懂Java集合类框架,以及常见面试题(二)
42 8
|
20天前
|
安全 Java 开发工具
Java基础19-一文搞懂Java集合类框架,以及常见面试题(一)
Java基础19-一文搞懂Java集合类框架,以及常见面试题(一)
35 6
|
19天前
|
安全 Android开发 Kotlin
Android面试题之Kotlin的几种常见的类
这篇文章探讨了Kotlin编程语言中的初始化顺序、延迟初始化、惰性初始化、`lateinit`与`by lazy`的区别、初始化注意事项、继承、嵌套类、数据类、单例类和枚举类的使用,以及密封类的概念。文中通过示例代码详细解释了各种特性,并提醒读者关注初始化顺序和线程安全问题。同时,鼓励读者关注作者的公众号“AntDream”获取更多相关文章。
20 1
|
5天前
|
Java 数据库 索引
技术好文共享:用商城维护类项目,讲下应届生如何在面试中介绍项目,如何准备面试
技术好文共享:用商城维护类项目,讲下应届生如何在面试中介绍项目,如何准备面试
|
5天前
|
存储 安全 Java
《ArrayList & HashMap 源码类基础面试题》面试官们最喜欢问的ArrayList & HashMap源码类初级问,你都会了?
《ArrayList & HashMap 源码类基础面试题》面试官们最喜欢问的ArrayList & HashMap源码类初级问,你都会了?
9 0
|
12天前
|
存储 Java 编译器
【搞定Jvm面试】 面试官:谈谈 JVM 类文件结构的认识
【搞定Jvm面试】 面试官:谈谈 JVM 类文件结构的认识
|
20天前
|
Java
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
18 0
|
20天前
|
设计模式 Java 内存技术
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
23 0