前言-
本文是为个人学习做的整理性质的笔记,肯定带有许多不妥的地方,仅供参考。
(第九章·接口 《Thinking in Java》)
interface关键字使抽象的概念更像前迈进了一步。
正文-
抽象类与接口-
abstract关键字允许人们在类中创建一个或者多个没有任何定义的方法——提供了接口的部分,但是没有提供任何相应的具体实现,这些实现使由类的继承者创造的。
interface关键字产生一个完全抽象的类,她根本就没有提供任何具体的实现,表示“所有实现了该接口的类看起来都像这样”。因此,任何使用某种特定接口的代码都知道可以调用的该接口的哪些方法,而且仅需要知道这些即可。
个人理解:
abstract基类中允许存在已经实现的方法和“抽象”方法,也就是挖了坑,继承该抽象类的导出类则需要填上这些坑即可。但是导出类中看不到在基类中已经实现的方法。
interface接口则全是挖的坑,谁要实现接口,谁就要填这些坑。除了坑之外没有其他隐藏的东西。在换句话来说,接口就像是类与类之间的协议。
※但是,接口不仅仅使一个极度抽象的类,因为她允许人们通过创建一个能够被向上转型为更多种基类的类型来实现某种类似于多重继承变种的特性》》
接口中-
接口可以包含域,但是这些域隐式地是static 和 final的。
比如:interface Instrument{int VALUE=5} 那么VALUE就是static和final的
接口中的方法可以显示的声明为public的,但即使你不这样做,她们也是public的。
※根类Object中出现的方法不用写在接口中,比如toString();。
通过继承来扩展接口-
一般情况下,只可能将entends用于单一类,但是可以引用多个接口。(类只能拥有一个“父类”,而接口则可以有很多)
如: interface Vampire extends Danger,Lethal{
void drinkBlood();
}
※小陷阱:将接口组合是会发生名字的冲突,打算组合不同接口中使用相同的方法名通常会造成代码的可读性混乱,所以请避免这些情况。但是方法完全相同并不会出现问题。
嵌套接口-
接口可以嵌套在类或者其他接口中,作为一种新的添加方式,接口也可因被实现为private的。这个点这里查看
接口中的域-
上文提到过的那样,任何你放入接口中的域都自动的是static和final的,所以接口就成为了一种很便捷的用来创建常量组的工具。
public interface Months{ int JANUARy=1,FEBRUARY=2,MARCH=3,APRIL=4,MAY=5,JUNE=6,JULY=7,AUGUST=8,SEPTEMBER=9,OCTOBER=10,NOVEMBER=11,DECEMBER=12; }
当然,现在你可以使用更加强大且灵活的enum关键字,但是在阅读老代码的时候,你还有有可能会碰到这种古老的用法。