zoukankan      html  css  js  c++  java
  • Java笔记8-抽象接口

    高级特性部分:
    抽象(abstract)
    接口(interface)

    提纲:
    抽象类的定义和使用
    模板设计模式的使用
    接口的定义和使用
    回调函数
    区别抽象类和接口的异同
    软件设计原则
    ---------------------------------------------------------------------
    抽象类
    定义:
    public abstract class XXX{
    //1.抽象类中可以有构造方法,但是抽象类不能够被实例化
    //2.抽象类中可以普通属性
    //3.抽像类中可以有普通方法

    //4.抽象类中可以定义抽象方法
    //->就是指没有方法体的方法,没有实现了的方法
    ->
    public abstract void method();
    }

    注意点:
    1.抽象类也是支持继承的,但是也是仅支持单继承

    2.抽象类当中可以不提供抽象方法,但是如果一个类当中提供了抽象
    方法,那么这个类必然是抽象类

    3.如果一个子类继承了某个抽象父类,那么这个子类必须全部实现父类当中
    的所有的抽象方法!!!除非这个子类本身也是抽象类


    4.抽象类也是一种抽象的数据类型,编译之后也是.class文件


    不能够一起混用的修饰符:

    访问修饰符:public protected [] private
    其他修饰符:static final abstract

    1.abstract和final能否一起修饰类或者方法?不能

    答:抽象类天生就是用来被子类继承的,但是final修饰的类是不能够被子类来继承的
    抽象方法天生被子类重写的,final修饰的方法是不能被子类来重写的


    2.private和abstract不能

    3.static和abstract 不能

    static虽然是允许手动重写,但是static不具有多态

    而abstract就是为了多态!!!
    ----------------------------------------------------------------------------------------------------------------------
    应用-模板设计模式
    应用场景:某些业务在全局来看,有一些相对比较稳定的业务流程,
    但是其中又有很多变化的细节!!!

    步骤:
    1.定义一个抽象类,里面提供若干个用来执行业务流程的一些
    抽象方法-具体的细节延迟到子类当中去实现

    2.定义一个公开的final的用来执行“顶级业务”的方法
    里面调用上面定义好了的抽象方法


    public abstract class 演小品{
    //1......
    //具体的实现延迟到子类当中去
    public abstract void 报幕();

    public abstract void 出场();

    public abstract void 搞笑();

    public abstract void 散场();

    //2.....
    public final void method(){
    报幕();
    出场();
    搞笑();
    散场();
    }
    }

    public class 宋小宝 extends 演小品{

    ....

    }

    public class 宋大宝 extends 演小品{

    ....

    }
    --------------------------------------------------------------------------
    接口(interface):
    作用:制定契约,
    真正可以屏蔽底层的实现
    支持多继承,用来拓展

    中央气象局<->天气预报
    =>腾讯
    =>UC浏览器

    关键字

    定义一个接口
    接口经过编译之后,也是一个.class文件

    public interface 接口名{//一般以I开头或者以able结尾
    //1.接口同样也是一种抽象的数据类型
    //2.接口中不能有构造方法
    //3.接口中的属性都是公开的静态的常量属性
    //public static final int CAR = 0;
    ->可以简写:
    //public int CAR = 0;
    int CAR = 0;
    //4.接口中的方法都是公开的抽象的方法
    //public abstract void method();
    //可以简写成
    void method();
    }
    子类->父类 继承extends
    实现类->接口 实现implements

    注意点:
    1.一个类可以去实现多个接口,多个接口之间用,隔开

    2.一个接口也可以去继承多个接口,多个接口之间也是用,隔开

    3.如果一个类实现了某个接口,那么它必须要实现接口当中的所有的方法

    除非这个类本身是一个抽象类

    4.一个类如果实现了某个接口A,而这个接口又去继承了某个接口C
    那么这个类必须要全部实现接口A中的所有方法,包括接口A从
    他的父接口当中继承过来的方法!!!

    5.接口可以yy成继承!!!
    -----------------------------------------------------------------------------------
    面向接口编程:
    1.对象的编译时类型写成接口
    2.方法的参数类型写成接口
    3.方法的返回类型写成接口
    -----------------------------------------------------------------------------------
    接口的分类:
    1.业务接口->定义一些用来处理业务的方法,比如CRUD

    2.常量接口->用来管理整个应用程序当中的所有的常量属性
    只定义了常量

    3.标记接口->什么都没有
    java.io
    接口 Serializable 标记接口,JVM针对此类型作判断
    判断某个对象是否具备持久化操作!!!

    通过instanceof运算符来判断某个类是否属于某个类型

    练习:
    1.定义一个抽象父类Vehicle
    实现Moveable接口

    void getDirection(int dir);

    2.定义俩个子类分别是Car Plane

    3.写工厂类VehicleFactory
    ----------------------------------------------------------------------------------------------
    先知道最终我们的打印需求...

    1.分析接口Moveable->业务接口->方法->void run(int dir);
    ->int getSpeed();

    2.分析常量接口IContants->知道每个常量属性用在何处?

    3.分析标记接口ICheckSpeed

    4.定义父类Vehicle->父类当中的共有的方法
    String getDirection(int type);

    5.分析子类Car Plane->子类是否调用了父类当中的方法!以及子类中实现接口中的方法

    6.分析简单工厂类MoveableFactory->掌握以下面向接口编程

    7.制定业务类MoveableBiz

    8.测试类TestMoveableBiz
    --------------------------------------------------------------------------------------------------
    抽象类和接口之间的选择
    名词性用抽象类
    动词性用接口

    抽象类和接口之间的区别和共同点

    共同点:
    1.都是属于抽象数据类型
    2.都不能够被实例化

    不同点:
    1.抽象类当中可以有构造方法,但是接口当中不能有构造方法

    2.抽象类当中可以有普通属性以及普通方法,接口当中的属性都是
    公开的静态的常量属性,接口当中的方法都是公开的抽象的方法

    3.抽象类仅仅支持单继承,但是接口是支持多继承的

    4.一个类只能继承一个抽象父类,但是一个类可以实现多个接口

    5.类与类之间是extends,接口与接口之间也是extends
    类与接口之间是实现implements
    ----------------------------------------------------------------------------------------------------
    回调函数(callback)
    俩个人在通电话

    A->B->现在没空,等会回你
    ->A说我给你留个号码,等会你拨打这个号码!!!
    此处的号码就相当于一个回调函数!!!

    服务端S有个方法s,客户端C有个方法c

    客户端的对象去调用服务端中的某个方法的时候,服务端S突然
    接受到某个时间的指令,在某个时刻又去调用客户端中的某个方法c
    c就是回调函数!!!

    回调+模版
    ----------------------------------------------------------------------------------------------------------
    软件设计原则:
    1.高内聚
    模块内部或者对象内部能够独立完成业务的能力比较强
    内聚越强,设计越好

    2.低耦合
    模块与模块之间或者对象与对象之间的依赖程度

    设计越好,耦合越低。。。
    ------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    Office 2007 打开 C# VS2005 导出的Excel时报错:单元格数据太大 Office 2003打开正常 的解决办法
    【30篇突击 android】源码统计 十四
    Android加载对话框,异步执行代码的封装类
    android 图片设置圆角
    【30篇突击 android】源码统计 十二
    android 制作的精美闹钟
    读WP8开发新书,送Windows Phone 8开发书籍
    各种曲线图表。矩形 圆形,股票
    【30篇突击 android】源码统计 十三
    日历程序,支持添加日程提醒
  • 原文地址:https://www.cnblogs.com/tarek/p/5419522.html
Copyright © 2011-2022 走看看