Java接口和抽象类的区别

抽象类: Java是一门面向对象编程的语言,所有的对象都是类的概念来进行描述的。但是反过来看,并不是所有的类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。举例来说,圆形和方形都是形状,但是我们在描绘形状时,我们描绘的是一系列拥有相同内核特征却有不同的表现方式的事物,仅仅通过我们的描述是无法确定唯一一个满足特性的东西。我们把这个形状类就称为抽象类。所以,抽象类往往用来表征我们在对问题领域进行分析设计中得出的抽象概念,是对一系列拥有不同表现形式,但本质上相同的具体概念的抽象。

接口:Java接口是一些方法特征的集合,没有方法的实现。Java接口中定义的方法在不同的地方被实现,可以具有完全不同的行为。所以接口实际上是一个抽象类型,是抽象方法的集合。举例来说,飞机和鸟并不是同一种生物,但是他们都有一个相同的特征,会飞。所以我们在描述会飞这个动作时,会联系到许多不同种类的东西。会飞这个动作即是一个接口。

区别
从上面的概念中,我们可以分析出接口和抽象类许多的区别。
1. 抽象类和接口在设计理念上不同。抽象类表示的是“is-a”的关系,接口表示的是“like a”的关系。
2. 因为抽象类在Java语言中表示的是一种继承关系,所以一个子类只能继承一个父类。但是,一个类可以有多种特征,所以可以实现多个接口。
3. 抽象类中可以有自己的数据成员,也可以有非abstract的成员方法。但是在接口中,所有的成员方法都是abstract的,并且只能够有静态的不能被修改的数据成员(也就是 static final 类型的)。
4. 接口中定义的变量默认是public static final型的,并且必须赋予初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是friendly型的,其值可以在子类中重新定义,也可以重新赋值。
5. 实现抽象类和接口的类都必须实现其中的所有方法。抽象类中可以有非抽象接口,接口中不能有实现方法。
6. 接口中的方法默认都是public abstract型的。

引申
abstract 关键字,不能和哪些关键字共存:

  • final:被final修饰的类不能有子类,不能被继承。但是被abstract修饰的类一定是一个父类。
  • private:抽象类中的私有的抽象方法,是不被子类所知的,就无法被复写的。而抽象方法出现的目的就是需要被复写的。
  • static: 抽象类方法就是用来被继承实现的。如果用static修饰抽象方法,那么就可以直接通过类名进行调用。 这样的设计是违背抽象类设计的初衷的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值