javaoop-接口
首先,我们来举一个例子:
现在我要实现下列要求:要求实现保险箱的功能。箱子有开和关的功能,锁有上锁和开锁的功能。
我们分析这个要求时会发现,保险箱是一个箱子,它有一把锁,可以将箱子和锁分别定义成抽象类。但是不能让保险箱在继承箱子的同时又继承锁。原因有两点:第一,保险箱不是锁,不符合继承中is a的关系;第二,java只支持单继承。这时就要用到接口。可以将锁定义为接口,让保险箱继承箱子,实现锁的接口。
//定义了一个锁的接口
public interface suo{
//上锁
public void lock();
//开锁
public void unlock();
}
//父类:箱子
public abstract class Xiang {
//开箱
public abstract void open();
//关箱
public abstract void close();
}
//子类:保险箱
public class BXX extends Xiang implements Suo {
@Override
public void lock() {
System.out.println("保险箱已经上锁");
}
@Override
public void unlock() {
System.out.println("保险箱的锁已经打开");
}
@Override
public void open() {
System.out.println("保险箱打开,咔哒~~~");
}
@Override
public void close() {
System.out.println("保险箱关闭,嘭~~~");
}
}
结论
- 接口中的属性都是静态常量,接口中的方法都是抽象方法,接口中没有构造方法。
- 类只能继承一个父类,但可以实现多个接口。一个类如果实现了一个接口,则必须实现接口中的全部方法,否则必须将其定义为抽象类,java通过实现接口达到了多重继承的效果。
- 接口表示一种能力,体现了接口和实现相分离的原则。
- 抽象类利于代码复用,接口利于代码维护。
- 通过面向接口编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性。