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.低耦合
模块与模块之间或者对象与对象之间的依赖程度
设计越好,耦合越低。。。
------------------------------------------------------------------------------------------------------------
Java笔记8-抽象接口的更多相关文章
- Effective java笔记3--类和接口2
三.接口优于抽象类 java提供两种机制,可以用来定义一个允许多个实现的类型:接口和抽象类.由于java只允许单继承,所以,抽象类作为类型定义受到了极大的限制. 已有的类可以很容易被更新,以实现新的接 ...
- Effective java笔记3--类和接口1
一.使类和成员的可访问能力最小化 要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他的实现细节.一个设计良好的模块会隐藏所有的实 ...
- java中静态,抽象,接口,继承总结
(一).静态: 1.静态方法里只能访问静态变量,静态变量是类所特有的,所有类实例都作用同一个变量 静态随着类的加载而加载 (二). 抽象:抽象相当于接口,没有方法体,只定义方法,让子类实现,抽象类中可 ...
- JAVA 之 多态 抽象 接口
一:多态 1:多态 一个对象有多种形式的能力 2:步骤 1编写父类派生子类 2子类重写父类方法 3用父类的数据类型引用子类对象 3:静态多态的实现方式就是方法重载 4:动态多态的实现方式就是重写 ...
- JAVA笔记6__抽象类/接口/多态/instanceof关键字、父类设计法则
/** * 抽象类:很多具有相同特征和行为的类可以抽象为一个抽象类 * 1.抽象类可以没有抽象方法,有抽象方法的类必须是抽象类 * 2.非抽象类继承抽象类必须实现抽象方法[可以是空实现] * 3.抽象 ...
- 【转载】JAVA中综合接口和抽象类实现的一种“抽象接口”
Muscleape个人总结:(这里的抽象接口是指:使用一个抽象类实现一个接口,是两部分结构) 使用一个抽象类直接实现接口,将接口中的方法区分为实现类必须要实现的和选择性实现的,其他需要实现接口的类型通 ...
- 【Head First Java 读书笔记】(八)接口与抽象类
接口是什么?它是一种百分之百纯抽象的类. 什么是抽象类?即无法初始化的类. 例如,我们设计一个animal类,以此类为父类,分别设计了多种动物子类,例如Lion,Tiger,Cat,Wolf,Do ...
- Java学习笔记之---比较接口与抽象类
Java学习笔记之---比较接口与抽象类 抽象类是描述事物的本质,接口是描述事物的功能 接口与抽象类的异同 1.一个类只能继承一个父类,但是可以有多个接口 2.抽象类中的抽象方法没有方法体,但是可以有 ...
- Java抽象接口技巧(一)
原文链接 http://blog.csdn.net/qq_35101189/article/details/70799155 在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接 ...
随机推荐
- window 链接方式
一.硬链接 mklink /H <destination> <source> 创建后的图标也和原文件的图标一样,在属性中也无法看出其中的链接关系 可通过命令查看 fsutil ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E. Goods transportation (非官方贪心解法)
题目链接:http://codeforces.com/contest/724/problem/E 题目大意: 有n个城市,每个城市有pi件商品,最多能出售si件商品,对于任意一队城市i,j,其中i&l ...
- Spring(1)
一.Spring是什么? .Spring是一个开源的框架 .是一个IOC(DI)和AOP容器的框架 .这个框架是为了简化企业级应用开发而生的,使用Spring可以使简单的JavaBean实现以前只有E ...
- SpringMVC与MyBatis整合(一)——查询人员列表
从今天开始,一点点的记录做毕设和学习的过程. 寒假才开始接触SpringMVC和MyBatis,之前对框架的概念理解并不到位,也没学过Spring.目前学习起来思路并不很清晰,有些东西我还不能理解,只 ...
- The last packet successfully received from the server was 2,926,157 milliseconds ago. The last packet sent successfully to the server was 2,926,158 milliseconds ago. is longer than the server configured value of 'wait_timeout'. 解决办法
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully rec ...
- ASP.NET DAY1
<!-- AutoEventWireup,CodeBehind,Inherits等属性可省略, Language属性为必须项 --> <%@ Page Language=" ...
- jdbc执行预处理,批处理,LOB字段处理,调用存储过程
(1)jdbc执行预处理 PreparedStatment预备语句 eg:String sql="insert into user(id,name,birthday,money) value ...
- linux环境下安装tomcat并配置tomcat日志分割
1.直接解压apache-tomcat-7.0.69.tar.gz 存放在/home目录下 根据需要自定义tomcat名称 mv apache-tomcat-7.0.69 Tomcat7 2.解压cr ...
- Android深度探索(卷1)HAL与驱动开发
第一章 介绍Android驱动开发和移植技术 主要对android和linux做了总体的介绍,让我们有了个感性的认识. 一.Android的四层系统架构: a) Linux内核:Android是基于L ...
- 更新App版本的流程
上班一年了还没有自己打包上传过APP,周五下班时项目经理手把手教了我一遍,我大致把流程在这里回顾一下: 1.首先要将svn上的代码拷贝一份到分支上,用终端操作:svn cp https://192.1 ...