Java的继承和实现、接口和抽象类,它们的区别?

之前我写过Java的继承和多态的用处,这次讲讲继承和实现,接口和抽象类的区别,这其实是个很基础的Java知识,但是真的非常重要。特别是在阅读源码的时候,源码里面用了大量的继承和实现,接口以及抽象类,只有弄明白它们的用法,才能在阅读源码的时候体会到“妙啊”的感觉。

简单来说说吧。

1.接口 interface

接口中的字段

接口中的变量使用 public static final 修饰(可以省略),并且需要给出初始值。如果不初始化也会报错。比如:

哪怕你初始化一个null也不报错:

接口中的方法

接口interface里面的方法都是抽象方法,不能有方法体,比如:

Java的继承和实现、接口和抽象类,它们的区别?_第1张图片

只能写成:

并且方法隐式的使用 public abstract 修饰(可以省略,并且只能是 public ,如果是 private,procted,那么就编译报错)。

注意:接口里面abstract可以省略,如果是抽象类里面用抽象方法,abstract是不能省略的。意思是说抽象类里面想定义一个抽象方法(不写方法体)必须带abstract。

2.抽象类 abstract class

相比于接口,抽象类中还可以包含非抽象方法,和字段。抽象方法只能写在抽象类里面,不能写在普通类里面。

所以除接口外,如果你想写一个抽象方法,那就需要定义当前类是抽象类。

3.继承extends和实现implements

继承的好处是代码复用。继承的子类自动拥有父类中的所有属性和方法。所以继承已存在的类就是复用这些类的方法和域。在此基础上,子类还可以添加一些新的方法和域,以满足新的需求。

关于继承的用处,也参考我之前的文章:Java的继承和多态,真的明白它的实际用处吗?

这次我们讲讲继承和实现在语法上有什么区别

1.extends前后保持一致(接口继承接口,类继承类,除了循环继承),否则报错。

注意:如果是类继承类,只能继承一个,此为单继承;如果是接口继承接口,可以继承多个。

2.implements只能是类实现接口。“类实现接口”,就是说implements前面只能是类,implements后面只能跟接口。

如果implements前面是接口,会报下面这个错:

Java的继承和实现、接口和抽象类,它们的区别?_第2张图片

如果implements后面是类(下面的例子OtherPerson是个类,不是接口),会报这个错:

你可能感兴趣的:(Java基础(学源码前必会),java)