接口,抽象类以及它们的区别

来源:互联网 发布:java线程与进程的区别 编辑:程序博客网 时间:2024/05/18 03:02

一、抽象类

如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。它的出发点就是为了继承,抽象类有方法体但是抽象方法没有方法体

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

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

         2、抽象方法必须由子类来进行重写,也就是说抽象类中的抽象方法子类必须实现它。如果子类没有实现它的抽象方法那么子类也是抽象类。

         3、只要包含一个抽象方法就是抽象类。

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

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

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

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

二、接口

一个类可以  实现 多个接口

接口中的常量和方法必须是public的访问权限,可以写出来或者不写,不写就是默认,接口中的方法没有方法体,接口 只能用 public  abstract 修饰

1.在接口中只有方法的声明,没有方法体。

2.接口中所有的方法必须都是抽象的,接口中也可以定义数据成员,但必须是常量

3.接口中没有构造方法,也不能实例化接口的对象。

4.接口可以实现多继承

5.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法,.则实现类定义为抽象类。

6.接口中不能包含静态方法 

三、联系

1 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。

2 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类(子类若为抽象类除外)都必须实现这些抽象方法。

四、区别

1. 一个子类只能继承一个抽象类,但能实现多个接口

2. 抽象类可以有构造方法,接口没有构造方法

3. 抽象类可以有普通成员变量,接口没有普通成员变量

4. 抽象类和接口都可有静态成员变量,抽象类中静态成员变量访问类型任意,接口只能public static final(默认)

5. 抽象类可以没有抽象方法,抽象类可以有普通方法,接口中在JAVA8之前都是抽象方法,但是接口在JAVA8之后有了默认方法

6. 抽象类可以有静态方法,接口不能有静态方法

7. 抽象类中的方法可以是publicprotected;接口方法只有public


0 0
原创粉丝点击