Java基础-抽象类和接口

抽象类和接口

抽象类和接口有类似之处:都不能用于创建对象,接口中的方法其实都是抽象方法。如果抽象类中只定义了抽象方法,那抽象类和接口就更像了。但抽象类和接口根本上是不同的,接口中不能定义实例变量,

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

抽象类和接口是配合而非替代关系,它们经常一起使用,接口声明能力,抽象类提供默认实现,实现全部或部分方法,一个接口经常有一个对应的抽象类。

比如,在Java类库中,有:

·Collection接口和对应的AbstractCollection抽象类。

·List接口和对应的AbstractList抽象类。

·Map接口和对应的AbstractMap抽象类。

对于需要实现接口的具体类而言,有两个选择:一个是实现接口,自己实现全部方法;另一个则是继承抽象类,然后根据需要重写方法。

继承的好处是复用代码,只重写需要的部分即可,需要编写的代码比较少,容易实现。不过,如果这个具体类已经有父类了,那就只能选择实现接口了。

我们以一个例子来进一步说明这种配合关系。前面引入了IAdd接口,我们实现一个抽象类AbstractAdder,代码如下:

public abstract class AbstractAdder implements IAdd {

@Override

public void addAll(int[] numbers) {

for(int num : numbers){

add(num);

}

}

}

这个抽象类提供了addAll方法的实现,它通过调用add方法来实现,而add方法是一个抽象方法。这样,对于需要实现IAdd接口的类来说,它可以选择直接实现IAdd接口,或者从AbstractAdder类继承,如果继承,只需要实现add方法就可以了。这里,我们让原有的Base类继承AbstractAdder,代码如下所示:

public class Base extends AbstractAdder {

private static final int MAX_NUM = 1000;

private int[] arr = new int[MAX_NUM];

private int count;

@Override

public void add(int number){

if(count<MAX_NUM){

arr[count++] = number;

}

}

}

https://www.bilibili.com/video/BV1zY411q7Cx/?spm_id_from=333.999.0.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值