一个类只能继承一个类(单根继承),但是一个类可以实现多个接口,多个接口之间使用,分隔
* 接口中的方法只能是抽象方法,默认修饰符都是public abstract
* 一个类实现了一个接口,必须重写接口中的所有抽象方法,如果不重写,那么实现了类也要定义为抽象类
* 接口不能实例化,但是可以将接口的引用指向其实现类实例
* 接口的变量都是静态常量,默认修饰修饰public static final
代码示例:
防盗门实现门和锁的功能:
package cn.bdqn.demo02;
public interface Lock {
// 定义锁“开锁”和“上锁”的功能
public abstract void openLock();
public abstract void closeLock();
}
package cn.bdqn.demo02;
public abstract class Door {
//定义门的“开门”和“关门”功能
public abstract void openDoor();
public abstract void closeDoor();
}
package cn.bdqn.demo02;
public class AntiTheftDoor extends Door implements Lock,TakePhoto {
@Override
public void openDoor() {
System.out.println("用力一推,门开了....");
}
@Override
public void closeDoor() {
System.out.println("用力一拉,门关了......");
}
@Override
public void openLock() {
System.out.println("插入钥匙,左转3圈,锁开了......");
}
@Override
public void closeLock() {
System.out.println("插入钥匙,右转3圈,上锁了....");
}
@Override
public void image() {
System.out.println("咔嚓,请注意你的行为,已经拍照存档了......");
}
}
USB风扇和USB鼠标实现USB功能:
package cn.bdqn.demo03;
public interface USB {
//定义两个方法
void electric();
void data();
}
package cn.bdqn.demo03;
public class USBFengSan implements USB {
@Override
public void electric() {
System.out.println("风扇获取电能,风扇开始运作....");
}
@Override
public void data() {
}
public void qqqq(){
System.out.println("我是风扇类中独有的方法");
}
}
package cn.bdqn.demo03;
public class USBMouse implements USB {
@Override
public void electric() {
System.out.println("鼠标获取电能,开始运作....");
}
@Override
public void data() {
System.out.println("获取数据传输能力,开始传输数据....");
}
public void test(){
System.out.println("我是鼠标类中特有的方法");
}
}
接口不能实例化
接口的引用不能调用实现类中特有的方法,需要进行向下转型
package cn.bdqn.demo03;
public class Test {
public static void main(String[] args) {
// 接口不能实例化
// USB usb = new USB();
//直接通过接口的实现类构造方法创建对象
USBFengSan usbf = new USBFengSan();
usbf.electric();
usbf.data();
System.out.println("---------------");
//通过向上转型创建实现类对象
//向上转型:“父类(接口)的引用指向实现类的实例
USB usb = new USBFengSan();
usb.electric();
usb = new USBMouse();
usb.electric();
//接口的引用不能调用实现类中特有的方法,需要进行向下转型
// usb.test();
//在向下转型过程中,容易出现类型转换异常
// USBFengSan usbs = (USBFengSan)usb;
// USBMouse usbm = (USBMouse)usb;
// usbm.test();
//可以使用instanceof关键字进行类型判断,避免异常
if(usb instanceof USBFengSan){
USBFengSan usbs = (USBFengSan)usb;
usbs.qqqq();
}else if(usb instanceof USBMouse){
USBMouse usbm = (USBMouse)usb;
usbm.test();
}
}
}
接口特性
接口不可以被实例化
实现类必须实现接口的所有方法
实现类可以实现多个接口 implements、多个接口使用逗号隔开
接口中的变量都是静态常量(public static final)
所有方法默认都是: public abstract



