说道他们的区别,首先让我们先了解一下什么是接口,什么是抽象类。
1.接口:
是抽象方法的集合,接口通常以interface来声明。
public interface Demo{
public void method();
}
2.抽象类:
使用了关键字abstract修饰的类,就是抽象类。
public abstract class Demo{
public abstract void method();
}
然后再让我们来看看他们的区别:
3相同点:
a.他们都不能被直接实例化,都必须通过继承实现其抽象方法。
b.都是面向抽象编程的技术基础,实现了诸多的设计模式。
4.不同点:
a.类是单继承,多实现(接口);接口是多继承。
(1)类的单继承
public class Son extends Father{
}
(2)类的多实现
public class Son implements Father,Mother,..{
}
(3)接口的多继承public interface Son extends Father,Mother,..{
}
b.抽象类中可以有抽象方法,也可以没有抽象方法。所以类中如果有抽象方法,就得是抽象类;是抽象类,但不一定有抽象方法。
而接口中所有的方法都是默认为抽象方法的。
c.抽象类中包括成员变量和非abstract的成员方法,而接口中只存在默认的public static final 的成员变量(在interface中一般不定义成员变量)和默认的public abstract的成员方法。
d.接口中没有构造方法,而抽象类中有构造方法(提供给子类的)。
e.接口如果被类实现了,必须重写里面所有的方法;如果是被抽象类实现了,就没必要重写所有方法。
抽象类如果被继承,一定要重写里面所有被abstract关键字修饰的方法。