高级特性部分:
抽象(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.低耦合
模块与模块之间或者对象与对象之间的依赖程度

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

Java笔记8-抽象接口的更多相关文章

  1. Effective java笔记3--类和接口2

    三.接口优于抽象类 java提供两种机制,可以用来定义一个允许多个实现的类型:接口和抽象类.由于java只允许单继承,所以,抽象类作为类型定义受到了极大的限制. 已有的类可以很容易被更新,以实现新的接 ...

  2. Effective java笔记3--类和接口1

    一.使类和成员的可访问能力最小化 要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他的实现细节.一个设计良好的模块会隐藏所有的实 ...

  3. java中静态,抽象,接口,继承总结

    (一).静态: 1.静态方法里只能访问静态变量,静态变量是类所特有的,所有类实例都作用同一个变量 静态随着类的加载而加载 (二). 抽象:抽象相当于接口,没有方法体,只定义方法,让子类实现,抽象类中可 ...

  4. JAVA 之 多态 抽象 接口

    一:多态  1:多态   一个对象有多种形式的能力 2:步骤 1编写父类派生子类 2子类重写父类方法 3用父类的数据类型引用子类对象 3:静态多态的实现方式就是方法重载 4:动态多态的实现方式就是重写 ...

  5. JAVA笔记6__抽象类/接口/多态/instanceof关键字、父类设计法则

    /** * 抽象类:很多具有相同特征和行为的类可以抽象为一个抽象类 * 1.抽象类可以没有抽象方法,有抽象方法的类必须是抽象类 * 2.非抽象类继承抽象类必须实现抽象方法[可以是空实现] * 3.抽象 ...

  6. 【转载】JAVA中综合接口和抽象类实现的一种“抽象接口”

    Muscleape个人总结:(这里的抽象接口是指:使用一个抽象类实现一个接口,是两部分结构) 使用一个抽象类直接实现接口,将接口中的方法区分为实现类必须要实现的和选择性实现的,其他需要实现接口的类型通 ...

  7. 【Head First Java 读书笔记】(八)接口与抽象类

    接口是什么?它是一种百分之百纯抽象的类. 什么是抽象类?即无法初始化的类.   例如,我们设计一个animal类,以此类为父类,分别设计了多种动物子类,例如Lion,Tiger,Cat,Wolf,Do ...

  8. Java学习笔记之---比较接口与抽象类

    Java学习笔记之---比较接口与抽象类 抽象类是描述事物的本质,接口是描述事物的功能 接口与抽象类的异同 1.一个类只能继承一个父类,但是可以有多个接口 2.抽象类中的抽象方法没有方法体,但是可以有 ...

  9. Java抽象接口技巧(一)

    原文链接 http://blog.csdn.net/qq_35101189/article/details/70799155 在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接 ...

随机推荐

  1. linux操作命令

    cd / 回到跟目录 cd ..  返回上一层目录 tomcat 的logs目录执行tail -f catalina.out查看日志 ps -ef|grep tomcat 查看tomcat进程 kil ...

  2. 【转】Linux查看机器负载

    转自 http://blog.csdn.net/szchtx/article/details/38455385 感谢 负载(load)是Linux机器的一个重要指标,直观了反应了机器当前的状态.如果机 ...

  3. 使用CSS3动画模拟实现小球自由落体效果

    使用纯CSS代码模拟实现小球自由落体效果: html代码如下: <div id="ballDiv"> <div id="ball">&l ...

  4. greendao 3.1.0在android studio中配置

    1 项目根build.gradle classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0' 2 app中build.gradle apply p ...

  5. js②

    操作符 ECMA-262描述了一组用于操作数据值的操作符,包括算术操作符(如加号和减号).位操作符.关系操作符和相等操作符. 一元操作符 递增和递减操作符(++ --) 一元加和减操作符 对非数值应用 ...

  6. JavaScript测试工具比较: QUnit, Jasmine, and Mocha

    1. QUnit A JavaScript Unit Testing framework. QUnit is a powerful, easy-to-use JavaScript unit testi ...

  7. 中小网站如何使用谷歌Adsence国际化优势赚钱?

    劲捷电子信息有限公司是一家拿了美国风险投资的互联网公司.他的创办人祁劲松2005年加入AdSense,迄今收获颇丰,为此他还写了一本 <Google AdSense实战宝典>.在祁劲松看来 ...

  8. WebGL如何解决中文文字载入

    关于WebGL载入中文字体问题,我在网上搜了一下,发现例子并不多,而且只能实现隶书的载入,不支持其他中文字体. 下面是实现的代码: <script src="../js/three.m ...

  9. Best Coder Round#25 1003 树的非递归访问

    虽然官方解释是这题目里的树看作无向无环图,从答案来看还是在“以1作为根节点”这一前提下进行的,这棵树搭建好以后,从叶节点开始访问,一直推到根节点即可——很像动态规划的“自底向上”. 但这棵树的搭建堪忧 ...

  10. C#变量详解

    1,变量的分类: C#是一种类型安全的语言.每一个变量都要求定义为一个特定的类型,并且要求存储在变量中的值只能是这种类型的值. 值类型 在C#中你可以通过声明枚举类型或是结构类型来定义你自己的值类型. ...