高级特性部分:
抽象(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. 场景4 Data Warehouse Management 数据仓库

    场景4 Data Warehouse Management 数据仓库 parallel 4 100% —> 必须获得指定的4个并行度,如果获得的进程个数小于设置的并行度个数,则操作失败 para ...

  2. flex页面刷新实现

    页面刷新:navigateToURL(new URLRequest("javascript:location.reload();"),"_self"); 关闭浏 ...

  3. 【转】Tomcat的默认访问路径

    放在外网的应用,用户多是直接输入域名访问,相信没有哪个后面还加个尾巴,而Tomcat的默认目录是ROOT,所以我们需要更改其默认目录. 更改Tomcat的默认目录很简单,只需要修改server.xml ...

  4. ssh无密钥登陆的简单配置

    主要目的是把本地的公钥放到远端被登陆的host上. 本地操作: # ssh-keygen # ssh-copy-id user@host 远端sshd_config配置: RSAAuthenticat ...

  5. 【转】关于Oracle将小于1的数字to_char后丢掉0的解决办法

    SQL代码如下: select rtrim(to_char(0.11, 'fm9990.99'), '.') from dual; 其中0.11为需要to_char的数字fm去掉字符串前面的空格999 ...

  6. 更改mysql中当前auto_increment的值的方法

    最近给自己网站更改mysql中当前auto_increment的值 如果在mysql中一个表test中的ID字段设为auto_increment插入两条记录后ID=2,这时删除1条记录,再插入一条变成 ...

  7. Hibernate的增删改查

    一.搭建Hibernate开发环境,这里就不说了,直接说环境搭好后的事情. 二.项目的目录结构

  8. ref与out之间的区别

    ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递.对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.ref ...

  9. It will affect staff as well.

    Premier Foods has reduced its number of suppliers dramatically in the last 12 months. In 2013 it mad ...

  10. 数据库DDL语句书写规范

    数据库DDL语句书写规范 1.SQL语句编写说明编写SQL语句应遵循统一的规范,包括大小写.空格.换行.缩进等等,只有完全一样的SQL才能在数据库中共享,从而减少硬解析. 字段类型.长度:根据数据情况 ...