10.接口

接口

1.定义

  • 接口是一种能力,在接口中对方法做具体的定义,但是不去做具体的实现,通过子类实现接口的抽象方法做具体的实现,优势:扩展性更强

  • 接口是抽象类实体,因为类是单继承关系,所以可以通过多实现接口拥有更多的父类.

  • 接口和抽象类的区别:

    1. 抽象类中可以有属性,可以有抽象方法,构造方法,普通方法,

    2. 接口中没有属性,都是public static final修饰的常量,都是public abstract修饰的抽象方法

    3. 抽象类和接口都不能被实例化

  • 类可以单独继承类.也可以单独实现接口

2.案例一:防盗门进出

  1. 情况一:带了钥匙,开锁进去

    • 门类

      /**
       * 	门
       * @author Administrator
       *
       */
      public abstract class Door {
      	/**
      	 * 	开门
      	 */
      	public abstract void openDoor();
      	/**
      	 * 	关门
      	 */
      	public abstract void closeDoor();
      }
      
    • 锁的接口

      /**
       * 	锁的接口
       * @author Administrator
       *
       */
      public interface  Lock {
      	/**
      	 * 	开锁
      	 */
      	public abstract void  openLock();
      	/**
      	 * 	关锁
      	 */
      	public abstract void lockUp();
      }
      
    • 防盗门类

      /** 
       * 	防盗门
       * @author Administrator
       *
       */
      public class TheftDoor extends Door implements Lock{
      
      	@Override
      	public void openLock() {
      		System.out.println("防盗门,开锁");		
      	}
      
      	@Override
      	public void lockUp() {
      		System.out.println("防盗门,关锁");
      	}
      
      	@Override
      	public void openDoor() {
      		System.out.println("防盗门,开门");
      	}
      
      	@Override
      	public void closeDoor() {
      		System.out.println("防盗门,关门");
      	}
      }
      
    • 测试

      	public static void main(String[] args) {
      		TheftDoor door1 = new TheftDoor();
              door1.openLock();
      		door1.openDoor();
      		door1.closeDoor();
      		door1.lockUp();
      	}
      
  2. 情况二:没带钥匙,人脸识别

    • 摄像机接口

      /**
       * 	摄像机
       * @author Administrator
       *
       */
      public interface DoorBell {
      	/**
      	 * 	 人脸识别
      	 */
      	//接口中所有的方法都是用public abstract修饰
      	void lookFace();
      }
      
    • 防盗门类

      /** 
       * 	防盗门
       * @author Administrator
       *
       */
      public class TheftDoor extends Door implements Lock,DoorBell{
      @Override
      	public void openLock() {
      		System.out.println("防盗门,开锁");		
      	}
      
      	@Override
      	public void lockUp() {
      		System.out.println("防盗门,关锁");
      	}
      
      	@Override
      	public void openDoor() {
      		System.out.println("防盗门,开门");
      	}
      
      	@Override
      	public void closeDoor() {
      		System.out.println("防盗门,关门");
      	}
      
      	@Override
      	public void lookFace() {
      		System.out.println("开门:人脸识别 ");
      }
      
    • 测试

      	public static void main(String[] args) {
      		TheftDoor door1 = new TheftDoor();
              door1.lookFace();
      		door1.openDoor();
      		door1.closeDoor();
      		door1.lockUp();	
      	}
      

3.案例二:智能手机与普通手机的功能区别

  • 普通手机的功能:打电话,发信息,听音乐

  • 智能手机的功能:打视频电话,发图片和信息,看视频,拍照,连接网络

  1. 手机类:手机信息,打电话,发信息

    /**
     * 	手机类
     * @author Administrator
     *
     */
    public abstract class Hamdest {
    	String brand;//手机品牌
    	String type;//手机型号
        
    	public Hamdest() {
    		super();
    	}
    	public Hamdest(String brand, String type) {
    		super();
    		this.brand = brand;
    		this.type = type;
    	}
        /**
        *	发信息的功能
        */
    	public abstract void sendInfo();
         /**
        *	打电话的功能
        */
    	public abstract void cali();
         /**
        *	手机信息
        */
    	public abstract void info();
    	
    }
    
  2. 播放的接口

    /** 
     * 	播放接口
     * @author Administrator
     *
     */
    public interface PlayWiring {
    	/**
    	 * 	播放的功能
    	 * @param incontent
    	 */
    	void play(String incontent);
    }
    
  3. 连接网络的接口

    /**
     * 	连接的接口
     * @author Administrator
     *
     */
    public interface Network {
    	/**
    	 * 	连接网络的功能
    	 */
    	void network();
    }
    
  4. 拍照的接口

    /**
     * 	照相接口
     * @author Administrator
     *
     */
    public interface TheakePictures {
    	/** 
    	 *	 照相的功能
    	 */
    	void takePictures();
    }
    
  5. 普通手机类

    public class CommonHandset extends Hamdest implements PlayWiring{
    
    	
    	
    	public CommonHandset() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public CommonHandset(String brand, String type) {
    		super(brand, type);
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	public void play(String incontent) {
    		System.out.println("开始播放音乐"+incontent+"-------------------");
    		
    	}
    
    	@Override
    	public void sendInfo() {
    		System.out.println("发送文字信息------------------------");
    		
    	}
    
    	@Override
    	public void cali() {
    		System.out.println("开始语音通话-----------------------------");
    	}
    
    	@Override
    	public void info() {
    		System.out.println("这是一款型号为"+this.brand+"的"+this.type+"手机");
    	}
    }
    
  6. 智能手机类

    public class AptitudeHandset extends Hamdest implements Network,TheakePictures,PlayWiring{
    
    	
    	public AptitudeHandset() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public AptitudeHandset(String brand, String type) {
    		super(brand, type);
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	public void takePictures() {
    		System.out.println("咔擦-----------------------拍照成功");
    	}
    
    	@Override
    	public void network() {
    		// TODO Auto-generated method stub
    		System.out.println("已经启动移动网络--------------------------------------");
    	}
    
    	@Override
    	public void sendInfo() {
    		// TODO Auto-generated method stub
    		System.out.println("发送带图片与文字的信息--------------------------");
    	}
    
    	@Override
    	public void cali() {
    		// TODO Auto-generated method stub
    		System.out.println("开始视频通话----------------------------------");
    	}
    
    	@Override
    	public void info() {
    		System.out.println("这是一款型号为"+this.brand+"的"+this.type+"手机");
    	}
    
    	@Override
    	public void play(String incontent) {
    		// TODO Auto-generated method stub
    		System.out.println("开始播放视频"+incontent+"----------------------");
    	}
    
    }
    
  7. 测试

    public class Test {
    	public static void main(String[] args) {
    		CommonHandset common = new CommonHandset("G502c", "索尼爱立信");
    		common.info();
    		common.play("《热雪》");
    		common.sendInfo();
    		common.cali();
    		System.out.println("---------------------");
    		AptitudeHandset apt = new AptitudeHandset("HTC","I9100");
    		apt.info();
    		apt.network();
    		apt.play("《小时代》");
    		apt.takePictures();
    		apt.sendInfo();
    		apt.cali();	
    	}
    
    }
    
  8. 结果

    这是一款型号为G502c的索尼爱立信手机
    开始播放音乐《热雪》-------------------
    发送文字信息------------------------
    开始语音通话-----------------------------
    ---------------------
    这是一款型号为HTC的I9100手机
    已经启动移动网络--------------------------------------
    开始播放视频《小时代》----------------------
    咔擦-----------------------拍照成功
    发送带图片与文字的信息--------------------------
    开始视频通话----------------------------------
    

4.案例三:墨盒打印

  1. 墨盒接口

    /**
     * 	墨盒接口
     * @author Administrator
     *
     */
    public interface InkBox {
    
    	/**
    	 * 	获取颜色  返回彩色或黑白
    	 */
    	public String getColor();
    }
    
  2. 灰色类

    public class GrayBox implements InkBox{
    
    	@Override
    	public String getColor() {
    		return "灰色";
    	}
    
    }
    
  3. 彩色类

    public class ColorBox implements InkBox{
    
    	@Override
    	public String getColor() {
    		return "彩色";
    	}
    
    }
    
  4. 纸张接口

    /**
     * 	纸张接口
     * @author Administrator
     *
     */
    public interface Paper {
    	/**
    	 * 	返回纸张大小 A4或B5
    	 */
    	public String getSize();
    }
    
  5. A4类

    public class A4Paper implements Paper{
    
    	@Override
    	public String getSize() {
    		return "A4";
    	}
    
    }
    
  6. B5类

    public class B5Paper implements Paper{
    
    	@Override
    	public String getSize() {
    		return "B5";
    	}
    
    }
    
  7. 打印类

    public class Printer {
    	InkBox inbox = null;
    	Paper paper = null;
    
    	public void setInkBox(InkBox inbox) {
    		// TODO Auto-generated method stub
    		this.inbox = inbox;
    	}
    
    	public void setPaper(Paper paper) {
    		// TODO Auto-generated method stub
    		this.paper = paper;
    	}
    
    	public void print() {
    		System.out.println("打印机效果:\n墨盒:"+inbox.getColor()+"\t纸张:"+paper.getSize());
    	}
    
    }
    
  8. 测试

    public class Test {
    	public static void main(String[] args) {
    		//创建墨盒接口对象
    		InkBox inbox = null;
    		//创建纸张接口对象
    		Paper paper = null;
    		
    		//创建灰色盒子和A4子类实例
    		inbox = new GrayBox();
    		paper = new A4Paper();
    		
    		Printer printer = new Printer();
    		printer.setInkBox(inbox);//设置墨盒
    		printer.setPaper(paper);//设置纸张
    		printer.print();//打印方法
    		
    		System.out.println("=======================================");
    		//创建彩色盒子和B5子类实例
    		inbox = new ColorBox();
    		paper = new B5Paper();
    		
    		printer.setInkBox(inbox);
    		printer.setPaper(paper);
    		printer.print();
    	}
    }
    

5.小结

  1. 接口和抽象类用法差不多,也能继承和多态,只是接口可以多实现,更加灵活,拓展性更强,提高复用,分层开发中,上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性更好.
  2. 接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离
  3. 接口的本身反映了系统设计人员对系统的抽象理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值