什么叫固定的?就是没有写就给你加上!!你不加阅读性差!
简单理解:当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另外一种形式来定义和表示,那就是接口 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~!!