抽象类的概念
什么是抽象类呢?我们先来看一个例子:一个父类是动物类,两个子类一个狗狗类,一个猫猫类。
Animal
中有一个dark()
方法,因为每个动物的叫的声音不同,而Animal
不是一个具体的动物,所以这个方法并不能实现,这时我们就可以把这个dark()
方法设计为抽象方法abstract method
,而含有抽象方法的类我们称为抽象类abstract class
。
抽象类的语法
使用abstract
修饰的类我们称为抽象类,使用abstract
修饰的是抽象方法。
抽象类的特性
1、抽象类不能实例化
抽象类是抽象的所以不能被实例化。
2、抽象类中既可以有抽象方法,又可以有非抽象方法
3、当一个普通类继承了抽象类,那么必须重写抽象类中的抽象方法。
当我们重写后,报错消失
4、抽象类中的抽象方法不能使用,
private final static
,因为抽象方法一定要被重写,所以要满足重写的条件。
5、当一个子类没有重写父类的抽象方法时,可以把当前子类变为抽象类。
6、抽象类中不一定有抽象方法,但又抽象方法的一定是抽象类。
7、抽象类中可以有构造方法,供子类创建对象时,初始化父类成员变量
接口的概念
在日常生活中我们都见过接口,例如插座,例如usb接口,只要符合该接口的类型我们就可以使用该接口。在Java中也是,我们把接口可以看作对方法的抽象,只要类满足使用这个方法的条件,就可以实现接口,可以把接口看作多个类的公共规范,是一种引用数据类型。
接口的语法
接口的定义形式跟类一样,只需要把class
关键字换成interface
关键字就可以了。
接口的特性
1、接口虽然时引用变量但不能被实例化。
2、接口中成员默认为
public static final
方法默认为public abstract
3、接口中的方法不能在接口中实现,必须在实现该接口的类里面重写后实现。但是JDK8开始,可以写一个default修饰的方法
4、接口中不能有构造方法和代码块
5、接口被类实现时使用
implements
实现。
6、接口中可以有static修饰的方法
多接口的实现
我们先来看一个例子:
想要实现这个需求狗狗类和鱼类都很简单
但是鸭鸭类我们需要实现三个接口怎么办呢?这就是很典型的用法,一个类继承一个类实现多个接口:
这就是Java中的不支持多继承,但是一个类可以实现多个接口。
接口的继承
我们发现实现多个接口的时候很麻烦,需要把每个接口都实现一下,有没有简单的方法呢?我们说类和类之间是不支持多继承的,但是接口和接口之间可以多继承。
为什么要设计接口呢?这些方法我们也可以写在抽象类里面,通过继承实现,为什么还要有接口?其实接口的作用是让我们不关注类的概念,关注的是类是否具有某种能力。
机器人不属于动物类但是依然可以实现IRunning
这个接口,这就是接口的好处。