抽象类和接口的区别

抽象类是子类的通用特性,它不能被实例化,只能用作子类的超类

接口是抽象方法的集合,如果一个雷实现某个接口,那么这个类一定要实现接口中的所有方法

Jdk1.8,接口有默认方法,实现接口的类不用实现默认方法,直接继承

抽象类和接口的区别

什么时候使用抽象类和接口

1.如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

2.如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。

3.如果基本功能在不断改变,那么就需要使用抽象类。

 

在使用抽象类时需要注意几点:

 

1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

 

2、抽象方法必须由子类来进行重写。

 

3、只要包含一个抽象方法的类,该方法必须要定义成抽象类,不管是否还包含有其他方法。

 

4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。

 

5、子类中的抽象方法不能与父类的抽象方法同名。

 

6、abstract不能与final并列修饰同一个类。

 

7、abstract 不能与private、static、final或native并列修饰同一个方法。

 

在使用接口过程中需要注意如下几个问题:

 

1、Interface的所有方法访问权限自动被声明为public。确切的说只能为public,当然你可以显示的声明为protected、private,但是编译会出错!

 

2、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。

 

3、接口中不存在实现的方法。

 

4、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。

 

5、不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。

 

6、在实现多接口的时候一定要避免方法名的重复。