JAVA-初步认识-第九章-面向对象-接口实现implements
一.
接口定义完了,接下来干嘛用?你要说一抽象类的话,是不是要搞个子类去继承这个类,并覆盖里面的方法。搞接口的话,怎么办呢?也是搞个子类继承这个接口?不。
如果你是个类的话,就搞个类去继承你,如果变成了接口的话,就不再用继承了。可以采用另外一种更直观的表现方式,叫做实现。
为什么叫做实现呢?接口里面的方法全都是抽象的,所以必须要全实现。而对于抽象类来讲,有些东西是不抽象的,子类可以直接拿过来用的,这就是实现和继承的区别。继承可以拿过来一些我不需要做,拿过来就能用的东西,而实现是不是说,你这里面有的,我都得去覆盖,这叫实现。里面没有一个能用,全都要自己重写。
类与类之间是继承关系,类与接口之间,换一种更确切的表述方式,叫实现。
二.
实现怎么写呢?
为什么写成DemoImpl,阅读性更好一些,
一看到DemoImpl,就想到了实现了Demo接口的实现类,某一个接口的实现类,Impl是简写。一般呢,会这么去取名字。
一个类去实现接口以后,这个接口里面有很多抽象方法,也要拿过来,和继承原理是一样的。如果里面没有抽象方法,那么它就是抽象类,(而不是接口)。再说一遍,一个类实现了接口,相当于获取了接口里面的所有内容,看下图。
它没有去覆盖show1(),show2()这两个方法,直接拿了这两个抽象的,那它还是个抽象类,而不是接口。
因此,实现接口以后,你想要实例化,必须覆盖所有的抽象方法。
接口是另一种形式的抽象类,里面全是抽象方法,当然不可以实例化了。
实现接口覆盖的时候,一定要写public(这是针对接口内的成员而言的,写法固定),否则编译会失败。方法体的内容可以自己定义了。
接口也有了,子类也有了,接下来就是创建对象。
上面截图中的三个输出语句哪个对?这三句话都对(我的理解是第二句和第三句,说的都是抽象类,无法实例化,但是阻碍调用么?) 第三句,接口的名称调用自己的成员,一加载语句就存在了。第二句,是子类拿过来用。第一句,是对象调用,因为你先在,我后在。无论谁调用,都不能写d.NUM=3, 因为NUM的值是final,不能被改变。
这就是实现的特点。