接口和抽象类的区别?
答:
抽象类可以存在普通成员函数,接口中在1.8之前,只有抽象方法,而1.8有静态和默认接口;
抽象类的成员变量可以提供多个类型,接口只能是public static final 修饰;
一个类只能有一个抽象类,但是可以有多个接口。
在JDK1.8以后,如果说你已经写好的接口被许多子类继承,你又需要重写和新增方法给个别子类使用,就可以用到JDK1.8新增的默认和静态接口;
默认方法可以选择实现与否,静态方法不能重新实现;
default 定义的普通方法,通过子类对象调用,所有子类均拥有此方法;
static定义的静态方法,通过接口名称直接调用。
本质:
接口是is a ,抽象类是like a
举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。抽象类的话,密码门和铁门都是门,它们都存在一个开门和关门的动作,但他们的本质都是门,因为他们这些操作都是基于自己是个门而实现的,抽象则是本质的抽象。
具象:具体存在的事物
抽象:用一些其他东西来描述一个具体存在的事物,比如说说到门你就会浮想出门的样子,抽象一定是基于具象而存在的。