什么是接口:
接口就是给出一些没有实现的方法,封装到一起,到某个类要是用的时候,再根据具体情况把这些方法写出来。
语法:
interface 接口名{属性;方法}
class 类名 implements 接口名{ 自己属性;自己方法;必须实现的接口的抽象的方法}
接口的特性:
-
接口不可以被实例化
-
实现类必须实现接口的所有方法
-
实现类可以实现多个接口
implements、多个接口使用逗号隔开
-
接口中的变量都是静态常量(public static final)
简单示例:
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();
}
}
}
接口的使用:
-
接口中的成员变量
默认都是public static final的,必须显式初始化
-
接口中的方法
默认都是public abstract的··············
-
接口没有构造方法,不能被实例化
-
一个接口不能实现另一个接口,但可以继承多个其他接口
-
一个类必须实现接口抽象方法(implements),除非这个类也是抽象类
package cn.bdqn.demo05;
public interface Interface01 {
void test01();
}
package cn.bdqn.demo05;
public interface Interface02 {
void test02();
}
package cn.bdqn.demo05;
public interface Test extends Interface01, Interface02 {
void test();
}
package cn.bdqn.demo05;
public class Demo implements Test {
@Override
public void test01() {
// TODO Auto-generated method stub
}
@Override
public void test02() {
// TODO Auto-generated method stub
}
@Override
public void test() {
// TODO Auto-generated method stub
}
}