接口
接口的特点:
JDK1.7
1.接口中不能有普通属性 默认都是静态常量 不管是否书写 都是public static final修饰
2.接口中不能有普通方法 默认都是抽象方法 不管是否书写 都是public abstract 修饰
3.实现类必须重写接口的抽象方法 除非子类是抽象类或者还是接口
4.接口不能实现接口,可以继承接口,也可以继承多个。
5.实现类可以实现多个接口
6.接口不能直接new对象 必须通过new实现类(子类)的方式 创建对象
JDK1.8+
1.接口可以写普通方法 使用default关键字 加载访问符之后 返回值之前
2.可以写静态方法
package com.qfedu.test4;
/**
* 手机抽象类
* 本类只提供手机最基本的功能
* 打电话
* 发短信
* @author WHD
*
*/
public abstract class Phone {
public abstract void sendMessage(String message);
public abstract void call();
}
package com.qfedu.test4;
/**
* 普通手机类
* 一个类需要继承类和实现接口的时候 先继承 后实现
* @author WHD
*
*/
public class CommonPhone extends Phone implements PlayMusic,TakePhoto{
@Override
public void sendMessage(String message) {
System.out.println("普通手机发信息" + message);
}
@Override
public void call() {
System.out.println("普通手机打电话,信号不好");
}
@Override
public void playMusic(String musicName) {
System.out.println("普通手机,音质感人,正在播放" + musicName);
}
@Override
public void take() {
System.out.println("100万像素,全景马赛克模式");
}
}
package com.qfedu.test4;
public class SmartPhone extends Phone implements PlayMusic,PlayGame,PlayVideo,TakePhoto,NetWork{
@Override
public void sendMessage(String message) {
System.out.println("智能手机发送语音短信" + message);
}
@Override
public void call() {
System.out.println("智能手机打视频电话");
}
@Override
public void connect() {
System.out.println("智能手机联网,连接世界,连接你我");
}
@Override
public void take() {
System.out.println("咔嚓一下,记录一张CD");
}
@Override
public void play(String videoName) {
System.out.println("智能手机正在播放" + videoName);
}
@Override
public void playGame(String gameName) {
System.out.println("智能手机正在玩游戏" + gameName);
}
@Override
public void playMusic(String musicName) {
System.out.println("智能手机播放音乐" + musicName);
}
}
package com.qfedu.test4;
/**
* 联网接口
* @author WHD
*
*/
public interface NetWork {
void connect();
}
package com.qfedu.test4;
/**
* 玩游戏接口
* @author WHD
*
*/
public interface PlayGame {
void playGame(String gameName);
}
package com.qfedu.test4;
/**
* 播放音乐接口
* @author WHD
*
*/
public interface PlayMusic {
void playMusic(String musicName);
}
package com.qfedu.test4;
/**
* 看片接口
* @author WHD
*
*/
public interface PlayVideo {
void play(String videoName);
}
package com.qfedu.test4;
/**
* 拍照接口
* @author WHD
*
*/
public interface TakePhoto {
void take();
}
接口使用多态的方式组装打印机
package com.qfedu.test5;
/**
* 打印机
* 墨盒
* 彩色 黑白
* 纸张
* A4 B5
* @author WHD
*
*/
public class Printer {
private InkBox inkbox; // 墨盒
private Paper paper; // 纸张
public InkBox getInkbox() {
return inkbox;
}
public void setInkbox(InkBox inkbox) {
this.inkbox = inkbox;
}
public Paper getPaper() {
return paper;
}
public void setPaper(Paper paper) {
this.paper = paper;
}
public void print() {
System.out.println("使用" + this.getInkbox().getInkBoxType() + "在" + this.getPaper().getPaperSize() + "纸张打印");
}
}
package com.qfedu.test5;
/**
* 墨盒接口 相当于规定了 墨盒的规范
* 返回墨盒的类型
* @author WHD
*
*/
public interface InkBox {
String getInkBoxType();
}
package com.qfedu.test5;
/**
* 黑白 黑色 墨盒
* @author WHD
*
*/
public class BlackInkbox implements InkBox{
@Override
public String getInkBoxType() {
return "黑白墨盒";
}
}
package com.qfedu.test5;
public class ColorInkbox implements InkBox {
@Override
public String getInkBoxType() {
return "彩色墨盒";
}
}
package com.qfedu.test5;
/**
* 纸张接口
* 获取纸张规格方法
*
* @author WHD
*
*/
public interface Paper {
String getPaperSize();
}
package com.qfedu.test5;
public class A4 implements Paper{
@Override
public String getPaperSize() {
return "A4";
}
}
package com.qfedu.test5;
public class B5 implements Paper{
@Override
public String getPaperSize() {
return "B5";
}
}
package com.qfedu.test5;
public class Test {
public static void main(String[] args) {
Printer hp = new Printer();
InkBox color = new ColorInkbox();
hp.setInkbox(color);
Paper a4 = new A4();
hp.setPaper(a4);
hp.print();
InkBox balck = new BlackInkbox();
Paper b5 = new B5();
hp.setInkbox(balck);
hp.setPaper(b5);
hp.print();
}
}