《疯狂Java讲义精粹》读书笔记9 ------ 接口

=================《疯狂Java讲义精粹》读书笔记9 ------  接口=====================

  接口是从多个相似的类中抽象出来的规范,接口不提供任何实现。它体现的是一种规范和实现分离的设计哲学

    · 接口可以是public 或者省略,不能用其他访问修饰符修饰
    · 接口应与类名采用相同的命名规则
    · 一个接口可以有多个直接的父接口,但接口只能继承接口,不能继承类
    · 接口里面包含成员变量,但只能是常量用 static final 修饰,缺省时系统会自动添加static final
    · 接口里面的方法只能是抽象方法用public abstract 修饰,缺省时系统会自动补全
    · 接口里不允许定义静态方法
    · 一个类可以继承一个父类,并同时实现多个接口,implements 部分必须放在 extends后面
    · 一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里所定义的去全部抽象方法;否则,该类也必须定义为抽象类

  下面看一个实现接口的类:

/**
 * 一个简单的接口实现
 * @author 《疯狂的Java讲义精粹》
 *
 */
/**
 * 定义Output 接口
 */
interface Output{
    int MAX_CACHE_LINE = 50;
    void out();
    public abstract void getData(String msg);
}

/**
 * 定义Product接口
 */
interface Product {
    int getProductTime();
}

public class TtestInterface implements Product, Output{
    private String [] printData = new String[MAX_CACHE_LINE];
    private int dataNum = 0;//用以记录当前需要打印的作业数
    
    //实现接口
    public void out(){
        //还有作业就要继续打印
        while(dataNum > 0){
            System.out.println("打印机打印:" + printData[0]);
            //把作业数队列整体前进一位,并将剩下的作业数减1
            System.arraycopy(printData, 1, printData, 0, --dataNum);
        }
    }
    
    public void getData(String msg){
        if(dataNum >= MAX_CACHE_LINE){
            System.out.println("输出队列已满,添加失败!");
        } else {
            printData[dataNum++] = msg;
        }
    }
    
    public int getProductTime(){
        return 45;
    }
    
    public static void main(String[] args) {
        Output o = new TtestInterface();
        o.getData("欢迎来到博客园");
        o.getData("我是CocoonFan");
        o.out();
        
        Product p = new TtestInterface();
        System.out.println(p.getProductTime());
    }
}

输出结果:

打印机打印:欢迎来到博客园
打印机打印:我是CocoonFan
45

  接口和抽象类很像:

    · 接口和抽象类都不能被实例化,他们都位于继承树的顶端,用于被其他类继承和实现
    · 接口和抽象类都可以包含抽象方法,实现接口和继承抽象类的普通子类都必须实现这些抽象方法
    · 接口体现一种规范,是多个模块间的耦合标准,抽象类体现一种模板式设计。

  在用法上:

    · 接口只能包含抽象方法,不包含已经提供实现的普通方法;抽象类则完全可以包含普通方法
    · 接口里不可以定义静态方法;抽象类里面可以定义静态方法
    · 接口里面不含构造器;抽象类里面可以包含构造器(让其子类调用)
    · 接口里不能包含初始化块;但抽象类可以包含初始化块
    · 一个类最多只能有一个直接父类,但一个类可以实现多个继承(通过这种方式来解决多继承问题

 

posted @ 2013-03-08 01:51  Cocoon  阅读(272)  评论(0编辑  收藏  举报