天天看点

Java基础知识总结:接口vs抽象类、重写vs重载

我觉得面试就真不该问这种问题,不了解的同学建议去看看

JDK

集合类的源码,对接口和抽象类的理解会更深刻。

接口

接口是方法的集合,不同的实现类可以去实现这个接口中的方法,因此有点像抽象类里的抽象方法,但是和抽象方法不同的是,接口更加通用,规定了一整套行为(例如

java.util.List

),而抽象方法往往是规定了该抽象类里的某种行为。

抽象类

抽象类的作用大多是抽取多个

Java

类的通用逻辑,对于子类特有的逻辑可以放在抽象方法中,由这些子类去各自实现,本质是通过子类继承的方式达到代码复用的目的(例如

java.util.AbstractList

)。

面向对象三要素

我们都知道,面向对象编程有三要素:封装、继承和多态。

封装很简单,就是设定边界,避免暴露内部状态;

继承则是一种紧密耦合的关系,有利于代码复用;

多态就是父类引用指向具体的子类实现,在编程时这种对应关系无法确定,只有在程序运行时才能知道。

重写和重载

重写

(Overwrite)

是指,父子类中相同名字和参数的方法,不同的实现,体现在父类与子类这种上下层关系里。

重载

(Overload)

则是相同名字的方法,但是不同的参数,本质上这些方法签名是不一样的,体现在某个类中,是并行的关系。

这里有个问题,方法名称和参数一致,但是返回值不同,这种情况在

Java

代码中算是有效的重载吗?面试里经常问道。答案是不行,编译直接报错。

继续阅读