抽象类与接口的区别

在理解它们的区别之前,先了解他们的概念

1 抽象类的理解

2 接口的理解

3 抽象与接口的区别

4 什么时候使用抽象类与接口

下面一步步解答

1:对抽象类的理解

(1)抽象必须有abstract关键字修饰,并且没有方法体。如果一个类中有抽象方法,则这个类称为抽象类,比如:

public class  userDao(){

  public abstract register(); //这是一个抽象方法,只有方法名,没有方法体。

}

(2)抽象类不能被实例化。

(3)当一个类是接口时(interface关键字修饰),里面有抽象方法,这个类也是抽象类,当另一个类实现这个接口抽象类时,必须全部实现全部的抽象方法。

以Externalizable接口为例:

public interface Externalizable{
 
    void writeExternal(ObjectOutput out) throws IOException;
 
    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}

当你实现这个接口时,你就需要实现上面的两个方法:

public class Employee implements Externalizable {
 
    int employeeId;
    String employeeName;
 
    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        employeeId = in.readInt();
        employeeName = (String) in.readObject();
 
    }
 
    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
 
        out.writeInt(employeeId);
        out.writeObject(employeeName);
    }
}

(3)可以用public ,protected,private修饰,如果不写,默认default,即public。如果用了private的抽象方法,则子类不能实现private的抽象方法。

(4)如果一个类继承一个抽象类,但是又没有实现抽象类里面的抽象方法,那么这个类也必须为抽象类,用abstract修饰。

2 对接口的理解

(1)接口类是用interface修饰的。定义一个接口如下:

public interface userDaoImpl{

}

(2) 接口里面可以定义成员变量,用public staic finall修饰,可以省略。但是不能用其它修饰,如private,protect。编译时会出错。

(3)接口中的方法,全部必须是抽象方法。

(4)一个类允许实现多个接口

3  抽象与接口的区别

(1)抽象可以有静态快或静态方法,而接口不允许有。

(2)抽象的成员变量可以是各种类型,而接口的成员变量只能是public static finall.

(3)一个类只能有继承一个抽象类,但是接口可以实现多个抽象类

4 什么时候使用抽象类与接口

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

(2)如果想多继承(一个类不能继承多个抽象类),就要用接口,接口可以实现(implement)多个抽象类。

原文地址:https://www.cnblogs.com/qq1141100952com/p/9202536.html