抽象类和接口

前言:

什么是抽象类和接口?抽象类本质上是一个类,只是它创造出来就是用来被继承的,而接口它虽然不是类,但是可以将它看作比抽象类更抽象的一个东西。具体是什么,有什么作用,请看下面!

1.抽象类(abstract)

1.1 什么是抽象类

抽象类就是一个被abstract修饰的一个类,如果你创建一个抽象类,里面是一定要写抽象方法的(虽然不写不会报错,但此时就是相当于是一个“普通”的类并且这个抽象类还不能被实例化,只能由继承它的子类来进行实例化),有了抽象方法每当子类继承了该抽象类,都必须重写类中的抽象方法(就好比此时有一个抽象类Animal,这个动物是啥我们不知道(有很多不同的动物),且动物这个大类有一个通用的习惯,也就是吃饭(eat方法),通常我们不会去直接new Animal的对象(事实上Java里也不允许抽象类进行实例化),而是去new子类对象,所以抽象类的存在是为了帮助我们进行检验:是否进行抽象类的实例化,抽象方法是否被重写)。抽象类里面还可以像普通类一样拥有构造方法,成员方法,成员变量。

例如:

现有一个Animal类:(里面有一个抽象方法eat)

Dog类和Cat类:(继承于Animal类的)

它们里面都重写了eat方法。此时我们再new子类的对象时就可以来调用子类中独有的eat方法。

1.2 抽象类在使用过程中的注意事项

(1)抽象类不能进行实例化,它可以像普通类一样拥有成员变量和方法。

(2)继承抽象类的子类必须重写类中的所有抽象方法。

(3)abstract不能与final,static,private共存。

(4)如果一个类实现一个抽象类,但不想实现里面的抽象方法,就可以将此类变为抽象类。

2.接口(interface)

2.1 什么是接口

接口可以理解为是抽象类的进一步的抽象,它里面只能有抽象方法和成员常量(被public static final修饰的),不能有普通成员变量和方法(但是里面可以有protected和default修饰的方法)。

这个就是接口,那它有什么作用呢?

接口的出现帮助我们实现了多继承的一个效果,我们知道一个类只能继承一个类,不能继承多个类,但是可以实现多个接口,从而实现各种不同的功能。

比如现有3个接口,第一个接口是IEat接口(吃),第二个是IRun接口(跑),第三个是IFly接口(飞)。现在有三个动物:狗(假设是一只腿没了的狗),青蛙,鸟。我们可以分析得到狗只能够吃,青蛙能够吃和跑,而鸟能吃,跑,飞。每种动物拥有不同的功能,也就是每个动物实现了不同的接口。可以将上述eg用代码实现:

三个接口:

三个动物:

Dog:实现了eating功能:

frog:实现eating和running功能:

Bird:实现eating,running和flying功能:

2.2 使用接口时的注意事项

(1)接口和抽象类一样也不能实例化对象,也不能用实现它的类来实例化对象,可以用匿名内部类来实现实例化对象

(2)接口里的抽象方法默认被会被public abstract修饰,所以一般不写修饰符。

(3)接口中的变量默认被public static final修饰,是一个静态成员常量。

(4)接口中的方法是不能有方法体的(抽象方法都不能有方法体)。

(5)接口中可以有protected和default修饰的方法,此方法可以有方法体。

(6)接口只能被public修饰,并且接口是默认被abstract修饰的。

(7)如果一个类不能实现接口当中的方法,但是又实现了该接口,就可以将该类变为抽象类。

(8)接口之间可以用extends实现扩展,eg:interface IA extends IB  ,class Test implements IA,此时Test类不仅需要重写IA接口中的抽象方法,还需重写IB中的抽象方法!!!

2.3 接口的一些实现方法:

(1)直接用implements实现:

(2)用匿名内部类实现:

相当于一个类实现IRun接口并且重写了running方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值