黑马程序员-----接口

来源:互联网 发布:管家婆软件下载地址 编辑:程序博客网 时间:2024/05/22 10:44

什么叫固定的?就是没有写就给你加上!!你不加阅读性差!


简单理解:当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另外一种形式来定义和表示,那就是接口 interface。

被定义的接口编译生成的也是class字节码文件。

//定义接口用的是interface,而不是class


抽样类就创建子类去继承(部分覆盖)

而接口就创建子类去实现,为什么叫实现?因为接口里面都是抽象类,要实现里面全部的功能。(全部覆盖)

再说一遍:类与类之间是继承关系,类与接口之间是实现关系。

子类实现接口后调用方法。

实现方法没有方法体,子类同时覆盖掉接口方法,不存在不确定性。

子类如果不覆盖接口中的方法,子类自己就变成抽象类了!

接口的出现避免了单继承的局限性。



接口可以多继承,原因就是接口中的方法没有方法体!!


接口的特点:


凡是对外暴露的,都是接口~~!




首先犬类 和 导盲类,那个需要抽象继承?那个需要实现接口?

在我认为犬类应该是被继承的,因为它是所有犬科抽取出来的一个基类,而导盲是一个额外的一个功能(原本没有的),

而且基类中有很多的功能不需要覆盖可以直接调用使用!


然而为什么不直接把导盲这个功能直接放在导盲犬里面呢?打个比方,来个猪,猫,狼他们也许都会导盲呢?是不是每个都要定义一下?复用性就不高了!

况且生活中我们需要到导盲这个
功能的时候,是不是不管具体的物体,而是看它有没有这个功能!有就上呗~~!!没有不用你!!




笔记本电脑例子


/*笔记本电脑使用。为了扩展笔记本的功能,但日后出现什么功能设备不知道。定义一个规则,只要日后出现的设备都符合这个规则就可以了。规则在java中就是接口。*/interface USB// 暴露的规则。{public void open();public void close();}class BookPC{public static void main(String[] args){useUSB(new UPan());//功能扩展了。useUSB(new UsbMouse());}//使用规则。public static void useUSB(USB u)//接口类型的引用,用于接收(指向)接口的子类对象。//USB u= new UPan();{if(u!=null){u.open();u.close();}}}//一年后。------------------------------//实现规则。//这些设备和电脑的耦合性降低了。class UPan implements USB{public void open(){System.out.println("upan open");}public void close(){System.out.println("upan close");}}class UsbMouse implements USB{public void open(){System.out.println("UsbMouse open");}public void close(){System.out.println("UsbMouse close");}}/*class Mouse{}class BookPC{public static void main(String[] args){useMouse(new Mouse());}public static void useMOuse(Mouse m){m.open();}public static void useMOuse(Mouse m){m.open();}}*/

练习过程中出现的错误:

传入子类对象的时候漏写括号~~~o(╯□╰)o~!!

0 0