zoukankan      html  css  js  c++  java
  • Java 接口篇

    为什么使用接口?

    问题

      要求实现防盗门的功能

    分析

    • 门有开和关的功能,锁有上锁和开锁的功能
    • 将门和锁分别定义为抽奖类

      那么问题就是防盗门即继承了门的同时又继承了锁,而Java的继承是单继承,接口可多继承

    解决

    • 将门定义为抽奖类,锁定义为接口
    • 防盗门继承门,实现锁的接口
    • 解决了多继承,更好的使用多态

    什么是接口?

      Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现

      因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

    如何使用接口?

      [ public ]   interface   接口名   [ extends   超接口表 ]   {    接口体   }

      接口是一种只由常量定义和抽象方法组成的特殊类。

      接口体中的内容是一系列常量的定义和方法的定义,不提供方法的实现(即没有方法体),用分号结尾。

      接口的所有变量都默认是final   static属性,所有的方法都是public  adstract属性。

      如果一个类要实现某个接口,必须实现接口的所有方法。

    面向接口编程

    1. 定义Door抽象类:具有开门,关门的功能
    2. 定义Lock接口:具备上锁,开锁的能力
    3. 编写TheftproofDoor类:继承类实现接口
    4. 编写测试类:让防盗门关门,上锁,开锁,开门
    package javaTest4;
    //抽象类 门
    abstract class  Door{
    	public abstract void open();
    	public abstract void close();
    }
    //接口:锁
    interface  Lock{
    	int i=1;   //都是静态常量
    	public  void  lock();  //都是抽象方法
    	public  void unlock();
    }
    //接口 照相机
    interface Crama{
    	public  void takePhotos();
    }
    //防盗门类
    class FDoor  extends Door  implements Lock,Crama{
    
    	@Override
    	public void open() {
    		System.out.println("开门");		
    	}
    
    	@Override
    	public void close() {
    		System.out.println("关门");	
    	}
    
    	@Override
    	public void lock() {
    		System.out.println("上锁");	
    	}
    
    	@Override
    	public void unlock() {
    		System.out.println("开锁");	
    	}
    
    	@Override
    	public void takePhotos() {
    		System.out.println("开门时,拍照");
    	}
    }
    public class test5 {
    
    	public static void main(String[] args) {
    		FDoor  fd=new  FDoor();		
    		fd.close();
    		fd.lock();
    		fd.unlock();
    		fd.open();
    		fd.takePhotos();
    	}
    
    }
    

     必须知道的接口特性

    • 接口不可以被实例化,常作为类型使用
    • 接口是一种特殊的抽象类
    • 实现类必须实现接口的所有方法
    • 实现类可以实现多个接口(Java中的多继承)
    • 接口中的变量都是静态常量
    • 接口默认是public      
  • 相关阅读:
    右建删除.svn
    Oracle 初始化 SEQUENCE附代码
    IE8支付宝密码控件
    JavaScript怎样读取Gridview控件的单元格的值
    IIS7 发布WCF
    C#创建后台服务注意事项
    Sqlserver中传递列参数需要注意的一个小细节
    JavaScript中针对中文参数的转编码
    VS2010里面调试后台服务
    href=#与href=javascriptvoid(0)的区别
  • 原文地址:https://www.cnblogs.com/wysk/p/7665861.html
Copyright © 2011-2022 走看看