zoukankan      html  css  js  c++  java
  • 《疯狂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

      接口和抽象类很像:

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

      在用法上:

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

  • 相关阅读:
    Visual Studio的框选代码区块功能
    序列化和反序列化
    使用C#采集Shibor数据到Excel
    LiveCharts文档-4基本绘图-3其他
    LiveCharts文档-4基本绘图-2基本柱形图
    LiveCharts文档-4基本绘图-1基本线条图
    LiveCharts文档-3开始-8自定义工具提示
    LiveCharts文档-3开始-7标签
    LiveCharts文档-3开始-6轴Axes
    LeetCode题解汇总(包括剑指Offer和程序员面试金典,持续更新)
  • 原文地址:https://www.cnblogs.com/CocoonFan/p/2949150.html
Copyright © 2011-2022 走看看