1.什么是接口?为什么需要接口?
1.1 接口是一种规范,一种标准,是“能不能做”,体现的近似于现实生活中的“你要xxx就必须要实现xxx(接口)”。
1.2Java是单继承的,一个子类只能有一个直接父类,但是我们在实际操作中,有时也会有需要一个类具有多个类的某些特征,因此设置了接口(interface)来实现类似这一操作。即一个子类只能继承一个直接父类,但是可以实现多个接口。
2.接口定义的注意事项?
①JDK1.7及以前,接口只能定义全局常量(public static final )和抽象方法(public abstract void xxx())
package InterfaceTest;
/*
* JDK 1.7 前:
* 只能修饰全局常量和抽象办法
*/
public interface flyable {
//全局常量
public static final double MAX_VALUE = 1000.0;
public static final double MIN_VALUE = 1000.0;
//抽象办法
public abstract void Flyup();
public abstract void Flydown();
}
JDK1.8以后,接口还可以定义静态方法,默认方法
package InterfaceTest;
/*
* JDK 1.8 后:
* 可以修饰全局常量和抽象办法,静态方法
*/
public interface flyable {
//全局常量
public static final double MAX_VALUE = 1000.0;
public static final double MIN_VALUE = 1000.0;
double MIN_VALUE2 = 1000.0;//省略了public static final,实际上仍然是全局常量
//抽象方法
public abstract void Flyup();
public abstract void Flydown();
//静态方法
public static void hello() {
System.out.println("hello");
}
}
②接口中不能定义构造器,即接口天然不可以实例化
③接口需要由类来实现(implements),才能发挥其功能
④一个类想要实现某个接口,就要实现这个类的所有抽象办法
package InterfaceTest;
public class Bird implements flyable {
@Override
public void Flyup() {
// TODO Auto-generated method stub
}
@Override
public void Flydown() {
// TODO Auto-generated method stub
}
}
⑤一个类只有实现了需要实现的接口的所有抽象方法,才可以实例化;否则,这个类仍然为抽象类。
package InterfaceTest;
abstract public class Bird implements flyable {
@Override
public void Flyup() {
// TODO Auto-generated method stub
}
}
⑥一个类可以实现多个接口(弥补单继承的不足)
package InterfaceTest;
public class Bird implements flyable,attackable{
@Override
public void Flyup() {
// TODO Auto-generated method stub
}
@Override
public void attack() {
// TODO Auto-generated method stub
}
@Override
public void Flydown() {
// TODO Auto-generated method stub
}
}
⑦接口与类之间可以实现,类与类之间可以单继承,接口与接口之间可以多继承。
⑧借口是标准,后面为了代码够标准,会有面向接口编程