接口的概念和特性总结笔记【xiao金刚】
接口的概念和特性总结笔记【原创】 转载请注明来自 QQ709448646 明明很爱你(xiao金刚)
什么是接口?
接口就是初期(强调)可以认为是一个特殊的抽象类;
当抽象类中的方法都是抽象就可以使用接口来表示;
Class 用于定于类;
interface 用于定义接口;
接口定义时的一些格式和特点;
1.接口中常见的定义:常量 ,抽象类;
2.接口中的成员都有固定的修饰符;
interface 《————接口
implements《————实现
常量:public static final
方法:piblic abstact
注意:接口中的所有成员都是public,这些都是固定的。所以接口里面的方法和常量都是固定公开的;
接口:不可以new(创建对象),因为接口具有抽象方法;
需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以使用实例化;
否则子类就是一个抽象类。
特点:
1。接口可以被多实现;
2。接口可以被接口多继承;(类extends【继承】类同时可以implements【多实现】接口)
为什么类不支持多继承。而接口可以多继承呢?因为接口是抽象类,抽象类中没有方法体。所以可以被继承,而类中拥有方法体,所以类无法时间多继承。【为了数据的安全性】
3。接口是程序的功能扩展,增加了程序的耦合性。
3。接口是对外暴露的规则。
这一点需要重点讲一下,什么是规则。其实这节课我不是听得很懂。但是起码可以体验到接口带来的扩展性是非常强大的。例如:封闭的硬盘只有100G的笔记本电脑。没有USB接口。当我们要增加内存容量的时候该肿么办?是不是要找一种方法来加?不然的话我就必须要换一个笔记本。但是。厂家提供了USB接口。USB接口是不是可以用来扩大内存容量。我 加一个外置的移动硬盘500G的。是不是马上变为了600G?这就是接口的扩展性。
又例如早期的CPU。当时的CPU都是焊死在机器里面的。我想要升级电脑。换个CPU的时候是不是要丢掉主板啊?这样不是太奢侈了嘛,于是制造主板 电源 芯片几个公司的人一起开会。开会说什么呢?一起研究怎么弄才可以不换掉主板就升级CPU呢? 后来就讨论出来了利用插槽就可以实现了。插槽是什么呢?插槽就是接口。CPU早期定义了478个针脚,每一个针脚都有自己的作用。用来处理一些供电或者数据处理之类的工作,这些针脚对应了插槽的数量,后来CPU越来越强大了。接口的数量也越来越多,完成的工作也越来越大了越来越快了。这就是接口来带的好处。强大的扩展性。
这里似乎没有说到暴露吧?错。其实已经讲到了。USB不就是暴露了嘛。插槽不是暴露了嘛,行。笔记就复习到这里。明天讲多态 ,代码例子在下面,自己看吧。不懂的回帖。
程序代码:
*/ interface Inter { public static final int NUM=3;//全局,静态,最终。。。。这是一个常量 public abstract void show(); } interface InterA { public abstract void show(); } class Demo { public void function(){} } class Test extends Demo implements Inter,InterA //一个类在继承一个父类的同时也可以实现一个或多个接口,先继承在实现可以 //扩展这个类的功能。 // { public void show(){} //只要有方法体就实现了覆盖。接口的权利比较特殊 //接口里面的方法都是公有的,所以要覆盖其中的方法,必须声明的函数权利为public //而抽象类不是,抽象类中的方法权限可以单独设定,而接口都是固定的。 } interface A { void methodA(); } interface B extends A //接口与接口之间是继承关系。extends { void methodB(); } interface C extends B //且接口之间存在多继承,如果B没有继承A的话 //C可以直接继承A和B。 interface C extends B,A 接口的多继承是因为接口中的抽象方法都没有方法体 { //但是在多继承时候,继承的两个或多个接口中不能有同名却不同类型的函数。 //(因为在实例创建对象时,对象调用该函数时会出错,不知道该调用哪一个) void methodC(); } class D implements C //D若要创建对象的话必须覆盖ABC中的三个方法 { public void methodA(){} public void methodC(){} public void methodB(){} } class InterfaceDemo { public static void main(String[] args) { Test t = new Test(); //用实现接口的类创建一个对象 System.out.println(t.NUM); //对象调用成员 System.out.println(Test.NUM); //类名直接调用成员 System.out.println(Inter.NUM); //接口名调用成员。编译完成后,接口也会生成一个字节码class文件。 }
忘记说了。NUM已经被final修饰了。不允许赋值了。所以t.NUM=4是错误的。
[ 本帖最后由 xiao金刚 于 2012-11-29 04:31 编辑 ]