您的位置:首页 > 其它

abstract class和interface的区别

2014-12-31 00:33 316 查看

相同点

1,含有abstract修饰符的class即为抽象类,abstract类不能创建实例对象。interface 也不能创建实例对象。

2,含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。interface中的所有方法必须是抽象的。abstract class类中定义抽象方法必须在具体的子类中实现。interface和abstract class都不能有abstract static方法。

3,子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

不同点

1,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以是任意,但是接口中的方法只能是public static final类型,默认即为public static final类型。interface中的成员变量必须都是public类型,可以不是静态类型。

2,抽象类中可以有非抽象构造方法,但是抽象类还是不能实例化,也就是抽象类有构造方法不等于它可以实例化,interface中不能有构造方法。

如下是抽象类可以有构造方法的一个验证:

class AbstractTest {
public AbstractTest() {
System.out.println("Abstract");
}
}

public class ExtendAbstract extends AbstractTest{
public ExtendAbstract() {
System.out.println("ExtendAbstract");
}
public static void main(String[] args) {
ExtendAbstract extendAbstract = new ExtendAbstract();
}
}




输出的结果为:



3,抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是public型的抽象方法。

4,抽象类中的抽象方法的访问类型可以是public,protected,default(有的文章说是不能是default,但是我刚才试了一下是可以的)。接口中的方法只能是public abstract。

贴出不同访问类型的作用域。
可见/访问性 在同一类中同一包中不同包中  同一包子类中  不同包子类中
 





5,抽象类中可以包含非抽象的静态方法,接口中不能包含静态方法。

6,一个类可以实现多个接口,但只能继承一个抽象类

参考文章:
http://wenku.baidu.com/link?url=Mq1Z0rA3fKlX54EurSxmyFCJfs5eAfRK2H7Zrg5pUKreu7J3JcTE4hlrTIe4VZFEgxFz6CX5uvh2Xzum3KkfZmqxVVsnR64ldACHMfY-g9G
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息