接口和抽象类
来源:互联网 发布:数据库里能放图片吗 编辑:程序博客网 时间:2024/05/16 17:17
1.适配器的使用
如果定义了一个接口,则它的子类要实现他全部的抽象方法。但是我们可以通过适配器来实现。这里用到了一个abstract来实现。
interface Window{public void open();public void close();public void icon();public void unicon();}class MyWindow implements Window{@Overridepublic void open() {// TODO Auto-generated method stub}@Overridepublic void close() {// TODO Auto-generated method stub}@Overridepublic void icon() {// TODO Auto-generated method stub}@Overridepublic void unicon() {// TODO Auto-generated method stub}}public class AdpaterDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub}}
像以上的实现要覆写全部的抽象方法,但是现在希望可以根据自己的需要来选择性的覆写,这个时候我们就要借助一个中间变量来实现,这个中间的变量就是抽象类。用一个抽象类先将接口实现了,但是实现的话都属于空实现,之后再继承此类。
因为抽象类的方法也不能直接使用,必须覆写。
interface Window{public void open();public void close();public void icon();public void unicon();}abstract class WindowAdpater implements Window{ public void open(){}public void close(){}public void icon(){}public void unicon(){}};class MyWindow extends WindowAdpater{public void open(){System.out.println("打开窗口");}}public class AdpaterDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub Window win = new MyWindow(); win.open();}}
2.工厂设计模式
看下面这段代码:
interface HomeWork{public void write();}class math implements HomeWork{public void write(){System.out.println("写数学作业。");}};class English implements HomeWork{public void write(){System.out.println("写英语作业。");}};public class InterDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub HomeWork hm1 = new math(); hm1.write(); HomeWork hm2 = new English(); hm2.write();}}他设计的并不好,因为他需要对main()函数中做大的修改,在这里我们应该把主方法看做一个客户端。客户端的代码要越简单越好。这样的设计不好耦合性太高了
所以现在我们将对他做如下的修改:
interface HomeWork{public void write();}class math implements HomeWork{public void write(){System.out.println("写数学作业。");}};class English implements HomeWork{public void write(){System.out.println("写英语作业。");}};class Factory {public static HomeWork getFruit(String className){HomeWork hm =null;if("math".equals(className)){hm = new math();}if("English".equals(className)){hm = new English();}return hm;}};public class InterDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub HomeWork hm = Factory.getFruit(args[0]); if(hm!=null){ hm.write(); }}}
3.抽象类和接口的区别
No
比较点
抽象类
接口
1
组成
抽象方法,普通方法,常量,变量,构造方法,全局常量
抽象方法,全局常量
2
定义
Abstract
interface
3
子类
子类通过extends继承抽象类
子类通过implements实现接口
4
限制
一个子类只能继承一个抽象方法
一个子类可以同时实现多个接口
5
关系
一个抽象类可以实现多个接口
一个接口不能继承一个抽象类,可以实现多个接口
一个抽象类中允许包含一个接口
一个接口允许包含一个抽象类
6
设计模式
模板设计
工厂设计、代理设计
都是通过对象的多态性,都是通过子类进行实例化实现操作
7
实现限制
存在单继承限制
不存在此种限制
从以上可以看出,两者做选择是优先选择接口
- 抽象接口和抽象类
- 接口和抽象类
- 接口和抽象类
- 接口和抽象类
- 抽象类和接口
- 抽象类和接口
- 抽象类和接口
- 接口和抽象类
- 抽象类和接口
- 抽象类和接口
- 接口和抽象类
- 抽象类和接口
- 抽象类和接口
- 抽象类和接口
- 抽象类和接口
- 接口和抽象类
- 抽象类和接口
- 接口和抽象类
- Spin control灵异的鬼怪的问题
- strftime, localtime_r(替代localtime), gettimeofday(替代ftime)
- AI 纪念~
- Xcode4.2 本地化 总结
- CentOS 6.2安装配置LAMP服务器(Apache+PHP5+MySQL)
- 接口和抽象类
- 通用 根据更新日期 来备份mysql 数据库(增量备份)
- 域名注册信息含义
- 微软面试题 博弈论 经典案例 (参考答案)
- C++中的友元关系
- 20个2013年最值得关注的网页设计趋势
- Android Contacts 联系人源码分析
- 近期的规划安排
- ant编译脚本详解