关于接口----java

  首先,接口和抽象类不能被实例化,所以不能直接通过new出对象调用其方法。但是接口可以被实现。一旦某个类要实现一个接口,必须要实现接口内所有方法,否则就必须声明为抽象类。

  当然实现接口的方法有很多种,都不难理解。但是要想在某种场合使用接口(即真正设置接口来解决问题)是困难的。例如c/s framework中clientConversation层(会话层)收到了来自服务器的消息:服务器异常宕机后,应该关闭客户端。但是这个关闭操作不应在会话层处理,也不应在Client层(管理层)处理。而应由用户(用我的c/s框架去开发APP的人)去做。即这个消息应从会话层传递给用户,用户编写方法,我在会话层调用他编写的方法实现关闭操作。此处很显然要用接口。

  我通过用户层new出Client类对象的方式开启客户端(此时是站在用户使用我框架的角度思考),开启后开始连接服务器,连上后通过Client层的方法创建clientConversation的对象来管理客户端与服务器的会话。现在的局面是,会话层和管理层有联系,管理层和用户层有联系,而我要在会话层调用用户写的方法。也许你会想,设置一个接口,里面写一个方法,会话层调用这个方法,用户层实现这个方法,是很轻松的。其实不然,因为clientConversation类是我框架内部的类,它的构造方法是包内有效的,用户没法new出对象,而我们也不可能在clientConversation中产生接口实现类(用户类)的对象。通过传递接口对象和通过对象.set方法设置接口对象的路都走不通(这里说的传递接口的对象是指  将接口实现类的对象赋值给接口类型的变量)。只能借助管理层来处理,因为它是架在这两端的桥梁。

  解决方法是:在管理层Client类里添加一个接口类型的成员A,并只提供getA和setA方法。因为是用户层实现了接口,产生了管理层Client类对象,所以可以通过Client类对象调用setA方法将自己的this赋值给管理层成员A。会话层可以事先创建一个Client类型的成员B,在Client类对象产生会话层时,将Client类里的this赋值给会话层成员B,那么通过(B.A.接口方法)就可以在会话层调用用户编写的方法了!

 

用户层代码:

 

 

管理层代码:

 

会话层代码:

 

接口:

 

 接口的使用是灵活的,掌握接口最好的方法就是将其运用在具体场景下。

 

posted on 2019-04-11 20:13  上进小青年!  阅读(192)  评论(0编辑  收藏  举报

导航