接口和抽象类

来源:互联网 发布:数据库里能放图片吗 编辑:程序博客网 时间: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

实现限制

存在单继承限制

不存在此种限制

从以上可以看出,两者做选择是优先选择接口




原创粉丝点击