1.接口与抽象类的区别(都不能被实例化)
一个子类只能继承一个抽象类,但能实现多个接口
方法:
抽象类可以没有抽象方法,它可以有普通方法,可以有静态方法。而接口中必须都是抽象方法,不能有静态方法。
变量常量:
抽象类中可以定义常量,变量(且访问类型任意)。而接口中只能定义常量。(public static final )接口中必须要有具体的实现才有意义,所以为public;接口中的数据对所有实现类只有一份,所以为static;接口中的常量只读不改,才能为实现接口的对象提供一个统一属性,所以用final。
构造方法:
因为它们都不能被实例化,接口没有构造方法,但是抽象类可以有构造方法,
2.为什么抽象类和接口中不能有静态的抽象方法?
抽象类不能实例化,即不能被分配内存。而静态方法在类的实例化之前就被分配了内存。所以出现了矛盾。
定义抽象方法的目的是重写此方法,而静态方法不能被重写(编译时就已经被确定了)。
3.抽象类可以继承普通类,但前提是普通类必须有明确的构造函数。(构造函数不能私有)
普通类也可以继承抽象类,对于抽象类的非抽象方法,可以选择性覆写。但不能覆写静态方法。
4.抽象类可以继承抽象类
(如果一个子类没有实现抽象父类的所有抽象方法,那么该子类须定义为abstract类型)