抽象类与接口的区别

抽象类

抽象类从名字上看就知道是抽象的,是相对于具体而言的。
抽象与具体就如生活中常见的例子:私家小汽车,小客车是具体的,车就是抽象的类;桃树、梨树是具体的,树就是抽象的;由此可见,抽象是把多个有共同内容的对象抽取出来。
我们也可以从实例化角度来看:当我们说桃树的时候,很容易把桃树类实例化为具体对象,但当我们说树的时候,是实例化为桂花树的具体对象?亦或是实例化为银杏树德具体对象?我们发现,想要实例化树是很难实例化为具体的对象。

在java中有抽象方法和抽象类,抽象方法是一个方法只能确定声明部分,不能确定实现部分,或者实现部分在子类确定。比如树有生长的方法,我们可以知道银杏树一年生长几厘米,桃树一年生长一两米,但我们却不知道树一年长多少。此时我们只能确定树有生长的方法,但是生长的方法只能在树的子类,即银杏树、桃树上确定。

语法上来讲,抽象方法应该在申明时加上可选修饰符abstract,小括号后面直接打分号,不打花括号。
如果一个类拥有抽象方法,那么这个类必须也要有abstract修饰定义为抽象类。如下:

public abstract class Tree{
			public abstract void grow();
}

抽象类的作用:是专门用来充当父类的,申明的抽象方法由子类重写。

接口

之前学到过的java中的多态是通过方法的重载和重写,亦或是动态绑定和重写来实现的,重写是有相同行为,不同参数列表,再各自实现各自的行为;重写是子类继承父类,自动拥有父类相同的行为,各个子类在有各自的实现。但上面提到的方法远远满足不了现实生活的丰富行为,现实生活中还有一些没有继承关系的类有相同的行为。接口的产生就补充了静态多态的现实行为,使java能实现更丰富的现实场景行为。
接口,简单的说就是即使是毫无关联的对象之间可能有相同的行为,接口就是定义了行为,并可以绑定在任何具有此行为的对象身上。
语法上:定义接口是需在访问修饰符public后加上interface。修饰符abstract、static可以省略
接口的名字一般叫做“***able”,代表什么样的能力。
调用接口时使用关键字implemention,多个接口之间用逗号隔开。
使用接口的原则:接口隔离原则,最小接口原则。

相似点

抽象类和接口都不能实例化;
抽象类和接口都有抽象方法。

区别

属性:接口的属性只能是公共、静态、常量属性,抽象类除了接口的要求,还可以是私有的,变量属性;
构造方法:接口不能有构造方法(即不能产生对象),抽象类必须要有构造方法;
初始化块:接口不能有初始化块,抽象类可以有初始化块,也可以有静态初始化块;
方法:接口中只能有抽象方法,不能有实现的方法,抽象类可以有抽象方法,也可以有实现方法。
多态的表现:一个类可以有多个接口,但一个类只能有一个父类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值