JAVA中的abstract 和 interface

本文探讨了Java中abstractclass与interface的区别,包括语法定义层面的不同:abstractclass能包含抽象和非抽象成员,而interface成员默认为抽象;以及设计理念层面的不同:abstractclass体现的是继承关系,而interface更侧重于实现契约。

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

abstract class 和 interface是Java语言中对于抽象类定义进行支持的两周机制,正是由于这两周机制的存在,才赋予了Java强大的面向对象的能力。abstract class和interface之间对抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因为很多developer在进行抽象类定义时对于abstract calss 和interface的选择显得比较随意,其实两者之间还是有很大区别的。

(1)语法定义层面

	abstract class Demo {
		abstract void func1();

		abstract void func2();

		private void func3() {
		}
	}

	interface Demo {
		void func1();

		void func2();
	}

在abstract class方式中,Demo可以有abstract数成员,也可以有非abstract数据成员和方法, 而在interface方式实现中,Demo只能有static final的数据成员,但在interface中一般不定义数据成员,而且所有的成员方法都是abstract的。

abstract class在Java语言中表示的是一种继承关系,Java类只能实现单继承,但是,却可以实现多个interface。

(2)设计理念层面

abstract class在Java中体现的是一种继承关系,父类和派生类之间必须存在“is-a”关系,即父类和派生类在概念本质上应该是相同的。

但是interface则不然,并不要求interface的实现者和inferface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值