总结一些接口与抽象类的区别
抽象类:
用abstract关键字修饰的类为抽象类,当类中包括抽象方法时这个类必为抽象 类。
抽象类顾名思义是不能被实例化的, 抽象类中的静态变量和静态方法都可以被访问,以类名.成员变量的方式和类名.静态方法名的方式访问,不以static修饰的变量和方法是不能被外部访问的。
抽象类一般来说都是会被继承的,子类强制重写父类的抽象方法,当我们的父类方法不确定具体内容时(父类的方法不能适用于所有有需要的子类时)就会写成抽象方法,让子类来根据自身的具体情况来实现该方法。
接口:
用 interface修饰的类为接口,接口当中只有方法的定义,没有方法的实现
接口中可以定义变量,在接口中定义的变量是静态的(static)和不可变得(final)这两个关键字可以加上也可以不加,不加的话接口会默认加上。定义的变量都可以通过类名.成员变量的方式被外部访问。
下边来谈谈他们的区别:
1.接口可以用abstract修饰但是没有意义,接口只能定义方法的声明不能有方法的实现。抽象类中除了抽象方法其他方法都能正常实现。
2.接口可以多继承(implements实现多个接口,有事候也称之为继承多个接口),抽象类只能继承一个
3.接口中变量都是static和final的,抽象类中的不一定是
4.抽象类关注的是事物的本质,接口关注的是事物的动作和操作
其实抛开其他可以看出来抽象类是优于接口的,但是Java是单继承多实现的,所以大多数情况都是用接口,除非极个别情况下会用抽象类。