JavaSE面试题——2.接口和抽象类的区别

一、接口和抽象类的相同点

① 接口和抽象类都不能被实例化,它们用于被其他类实现和继承

② 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法

二、接口和抽象类的区别

① 接口里只能包含抽象方法,静态方法和默认方法,不能为方法提供实现,也就是方法不能书写方法体,而抽象类中的普通方法可以为方法提供实现

② 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是被public static final 修饰的常量,常量必须赋值

③ 接口中不能包含构造器,而抽象类中可以包含构造器,抽象类中的构造器并不是用于创建对象,而是让其子类调用构造器来完成属于抽象类的初始化操作

④ 接口里不能包含初始化代码块,但抽象类里完全可以包含初始化代码块

⑤ 一个类只能继承一个抽象类,而一个类却可以实现多个接口

三、什么时候使用抽象类和接口?

抽象类描述的是事物的本质,而接口描述的是事物的功能

当需要为一些类提供公共的实现代码时,和规范子类行为时,应优先考虑抽象类。因为抽象类中的非抽象方法可以被子类继承下来,使实现功能的代码更简单,并且必须实现抽象方法

当注重代码的扩展性跟可维护性时,应当优先采用接口,一般使用接口的情况更多

如果想实现多重继承,就必须使用接口,由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口,因此你就可以使用接口来实现多重继承

四、接口和抽象类的设计目的

抽象类:强调的是把共同(共有、相同)的属性、方法抽象出来,统一写在一个地方,它们的实现代码是一样的,方便维护(利用的是继承这个特性),也用来规范子类的行为,子类必须重写抽象类中的抽象方法

接口:抽象的行为,同一种行为有不同的实现方式,当多个对象都拥有相同的行为,但是行为的具体实现方式不一样的时候可以用接口抽象(利用的是多态特性)


JavaSE面试题整理

JavaSE面试题——1.面向对象和面向过程有什么区别?

### 关于JavaSE中类对象的相关面试题 #### 什么是反射,以及如何在Java中使用它? 反射是一种强大的工具,在运行时获取类的信息并动态操作这些信息的能力称为反射。通过`Class`对象可以获得当前类的方法、构造函数、接口、父类等信息,并能通过反射机制实例化一个类,设置其属性或调用方法[^1]。 ```java // 使用反射创建对象的例子 try { Class<?> clazz = Class.forName("com.example.MyClass"); Object instance = clazz.getDeclaredConstructor().newInstance(); } catch (Exception e) { e.printStackTrace(); } ``` #### 解释继承的概念及其作用是什么? 继承是指从已有的类获得继承信息来构建新的类的过程。提供继承信息的类被称为父类(也叫超类或基类),而接收继承信息的新建类则被称为子类(亦称派生类)。这种特性使得软件系统的某些方面可以在变更过程中保持一定的连续性一致性,同时也是封装程序内部变动因素的有效方式之一[^2]。 #### String, StringBuilder StringBuffer 的区别有哪些? - `String`: 表示不可变字符序列。每次修改都会生成一个新的`String`对象。 - `StringBuilder`: 可变字符序列,线程不安全,适用于单线程环境下的高效字符串拼接。 - `StringBuffer`: 同样是可变字符序列,但是它是线程安全的,因此性能相对较低[^5]。 #### 抽象类能否被实例化?为什么? 不可以。因为抽象类是用来定义其他具体实现类的基础模板,其中可能包含了未完成的具体逻辑——即抽象方法。由于缺少完整的功能实现,直接实例化是没有意义的;相反地,应该由具体的子类去扩展这个抽象类,并覆盖所有的抽象方法以形成完整的行为集合[^4]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值