目录
1、接口
(1)概念:接口是一个特殊的抽象类
(2)接口的使用
1)接口中的抽象方法修饰符默认为public abstract,在定义方法的时候public abstract可以不写
2)接口是一个特殊的抽象类,不能实例化
3)接口中的变量都是静态常量
4)类实现接口通过implements关键字实现
5)一个类实现一个接口,该类中必须将接口中的方法全部重写,如果不重写接口中的方法,就需要将类定义为抽象类
6)一个类可以实现多个接口,多个接口之间使用,隔开
7)类与类之间是继承关系,一个类只能继承一个父类
8)类与接口之间是实现关系,一个类可以实现多个接口
9)接口与接口之间是继承关系,一个接口可以继承多个接口
10)接口本身一旦制定,就不允许随意修改
2、举例
1)例1:
Door抽象类:
public abstract class Door {
// 定义开门的功能
public abstract void openDoor();
// 定义关门的功能
public abstract void closeDoor();
}
Lock接口:
public interface Lock {
// 定义开锁的功能
public abstract void openLock();
// 定义上锁的功能
void closELock();
}
TakePhoto接口:
public interface TakePhoto {
void look();
}
FangDaoDoor类:
public class FangDaoDoor 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 look() {
System.out.println("咔嚓,拍照成功......");
}
}
Test类:
public class Test {
public static void main(String[] args) {
//创建FangDaoDoor类对象
FangDaoDoor fdd = new FangDaoDoor();
fdd.closeDoor();
fdd.closELock();
fdd.look();
System.out.println("出去玩了2小时......");
fdd.openLock();
fdd.look();
fdd.openDoor();
}
}
2)例2:
USB抽象类:
public interface USB {
//接口本身是不具备功能,接口的功能是通过方法来体现的
//定义提供电能的方法
void dian();
//定义传输数据的方法
void data();
}
实现USB接口的USBUFengSan类:
public class USBFengSan implements USB {
@Override
public void dian() {
System.out.println("获取电能,风扇开始转动");
}
@Override
public void data() {
//USB风扇不需要传输数据,那么在该方法内不需要具体的实现
}
}
实现USB接口的USBMouse类:
public class USBMouse implements USB {
@Override
public void dian() {
System.out.println("鼠标获取电能,开始工作.....");
}
@Override
public void data() {
System.out.println("鼠标连接接口,开始传输数据.....");
}
public void test(){
System.out.println("我是USBMouse类里独有的方法test()");
}
}
实现USB接口的USBUPan类:
public class USBUPan implements USB {
@Override
public void dian() {
System.out.println("U盘获取电能,开始工作....");
}
@Override
public void data() {
System.out.println("U盘连接接口,传输数据....");
}
}
Test类:
public class Test {
public static void main(String[] args) {
USBFengSan ufs = new USBFengSan();
ufs.dian();
ufs.data();
//向上转型:父类的引用(接口)指向子类的实例
USB usb = new USBMouse();
usb.dian();
usb.data();
//向下转型:子类的引用指向父类的实例
if(usb instanceof USBMouse){
USBMouse usm = (USBMouse)usb;
usm.test();
}
usb = new USBUPan();
usb.dian();
usb.data();
}
}
3)例3:
需求说明:原始的手机,可以发短信,通电话。随着发展,手机增加了功能:音频、视频播放、拍照、上网。使用接口实现手机功能
HanSet类:
//定义手机抽象类HandSet类
public abstract class HandSet {
private String brand;
private String type;
public HandSet() {
super();
}
public HandSet(String brand, String type) {
super();
this.brand = brand;
this.type = type;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
// 定义发短信的方法
public abstract void sendInfo();
// 定义打电话的方法
public abstract void calll();
public void info() {
System.out.println("这是一款型号为" + this.type + "的" + this.brand + "手机");
}
}
NetWork接口:
//上网接口
public interface NetWork {
void networkConn();
}
PlayWiring接口:
//照相接口
public interface TakePicture {
void takePictures();
}
TakePicture接口:
public interface PlayWiring {
void play(String name);
}
ApitudeHandSet类:
public class ApitudeHandSet extends HandSet implements NetWork, PlayWiring,
TakePicture {
public ApitudeHandSet() {//手动添加无参构造方法
super();
}
public ApitudeHandSet(String brand, String type) {//手动添加有参构造方法
super(brand, type);
}
@Override
public void takePictures() {
System.out.println("咔嚓......拍照成功");
}
@Override
public void play(String name) {
System.out.println("开始播放视频《" + name + "》");
}
@Override
public void networkConn() {
System.out.println("已经启动移动网络......");
}
@Override
public void sendInfo() {
System.out.println("发送带有图片和文字的信息.....");
}
@Override
public void calll() {
System.out.println("开始视频通话.....");
}
}
CommonHandSet类:
public class CommonHandSet extends HandSet implements PlayWiring {
public CommonHandSet() {//手动添加无参构造方法
super();
}
public CommonHandSet(String brand, String type) {//手动添加有参构造方法
super(brand, type);
}
@Override
public void play(String name) {
System.out.println("开始播放音乐《"+name+"》....");
}
@Override
public void sendInfo() {
System.out.println("发送文字信息.....");
}
@Override
public void calll() {
System.out.println("开始语音通话.....");
}
}
Test类:
public class Test {
public static void main(String[] args) {
CommonHandSet chs = new CommonHandSet("索尼爱立信", "G502c");
chs.info();
chs.play("热雪");
chs.sendInfo();
chs.calll();
System.out.println("--------------------");
ApitudeHandSet ahs = new ApitudeHandSet("HTC", "I9100");
ahs.info();
ahs.networkConn();
ahs.play("小时代");
ahs.takePictures();
ahs.sendInfo();
ahs.calll();
}
}