码迷,mamicode.com
首页 > 编程语言 > 详细

Java笔记8-抽象接口

时间:2016-04-22 00:59:19      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

高级特性部分:
抽象(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-抽象接口

标签:

原文地址:http://www.cnblogs.com/tarek/p/5419522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!