抽象类与接口的区别
在理解它们的区别之前,先了解他们的概念
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)多个抽象类。