abstract class和interface的区别

本文详细阐述了Java中抽象类和接口之间的相似点与不同点,包括成员变量的访问类型、构造方法的存在、静态方法的包含、实现方式以及继承与多态的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相同点


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值