虽然我在学习的过程中很少写过interface,但是却经常使用到implements,来让写的类遵循某个特定的接口。学习interface,首先我们还是先来了解一下抽象类吧:
抽象方法:仅由声明,没有方法体的方法。
包含抽象方法的类叫做抽象类,如果一个类包含一个或者多个抽象方法,则该类必须为抽象类,然而抽象类不一定必须具有抽象方法。
抽象类的功能:阻止产生这个类的任何对象(想一想单例模式??),非常有用的重构工具(我也不清楚,等以后知道了再来分析)。
而对于接口interface,interface这个关键字产生一个完全抽象的类,没有任何具体的实现,接口内的方法自动都是为public的。interface与抽象类比较而言,其核心优势在于:接口允许我们可以创建一个能够向上转型为多种基类的类,来实现类似多重继承的特性(这也是我们前面分析继承与组合该如何选择的重要分析点)。
看了看感觉接口并没有什么难点,这里重点学习下两个设计模式吧:适配器设计模式和工厂方法设计模式。
①适配器模式
我们经常遇到的情况是:需要将已有的实现类来满足特定的接口的调用。
1)已有应用Apply可以调用处理器
public class Apply { public static void process(Processor p, Object s){ System.out.println("Using Processor" + p.name()); System.out.println(p.process(s)); } }
2)已有的处理器Processor接口
public interface Processor { String name(); Object process(Object input); }
3)我们已经具有了高通滤波器HighPass和低通滤波器LowPass
public class Filter { public String name(){ return getClass().getSimpleName(); } public String process(String input){ return input + ""; } } public class HighPass extends Filter{ double cutoff; @Override public String process(String input){ return input + "lower than " + cutoff + "can't pass."; } public HighPass(double cutoff){ this.cutoff = cutoff; } } public class LowPass extends Filter{ double cutoff; @Override public String process(String input){ return input + "higher than " + cutoff + "can't pass."; } public LowPass(double cutoff){ this.cutoff = cutoff; } }
我们希望Apply可以直接使用高通与低通滤波器。
我们可以建立如下的适配器类:
public class FilterAdapter implements Processor{ private Filter filter; public String name(){ return filter.name(); } public String process(Object input){ return filter.process(input.toString()); } public FilterAdapter(Filter filter){ this.filter = filter; } }
这样便可以通过完成调用。
Apply.process(new FilterAdapter( new LowPass(5.5)), "test"); Apply.process(new FilterAdapter( new HighPass(5.5)), "test");
可以看出FilterAdapter接收已经拥有的接口Fiter,生成满足需要Processor接口的对象。考虑一下这种方式和以前所提到的代理(避免由于继承而导致基类中的方法过度的暴露)有着异曲同工之妙。
②工厂方法模式
假设我们需要建立一个游戏平台,可以在上面玩耍不同的游戏,而不用修改代码。
interface Game{ void play(); } interface GameFactory{ Game getGame(); } class Checker implements Game{ public void play(){ System.out.println("checker game start"); } } class CheckersFactory implements GameFactory{ public Game getGame(){ return new Checker(); } } class Chess implements Game{ public void play(){ System.out.println("chess game start"); } } class ChessFactory implements GameFactory{ public Game getGame() { return new Chess(); } } public class GamePlatform { public static void playGame(GameFactory factory){ factory.getGame().play(); } public static void main(String[] args) { playGame(new CheckersFactory()); playGame(new ChessFactory()); } }
我们可以看出工厂方法的优点在于我们不必事先确定game的类型,我们game的获取不是通过构造器,而是通过工厂对象调用创建game的方法,这样我们就可以将代码与接口的实现相分离,使得GamePlatform内的代码得到复用。
③接口内的field都自动为static和final,所以不能为空值,即声明时就必须初始化。
相关推荐
java基础之接口基础
在本文中,我们将深入探讨Java接口的基础知识,包括接口的定义、使用、接口与抽象类的区别以及接口中的默认方法等核心知识点。 首先,接口在Java中是一个完全抽象的类型,它只包含常量定义和抽象方法声明,不包含...
Java接口在Java编程语言中扮演着至关重要的角色,它是实现多态性和抽象化的关键...理解和熟练使用接口是成为专业Java开发人员的基础。在实际项目中,正确地利用接口可以使代码结构清晰,易于维护,并提高代码的复用性。
Java API接口文档模板是Java初学者必须掌握的重要知识点之一。该文档模板提供了详细的接口输入输出定义,旨在帮助前后端开发人员快速了解和使用接口。下面我们将对该文档模板进行详细解释。 1. 文档概述 该文档...
【Java Web接口开发】是Web应用程序开发中的一个重要环节,它允许不同的系统或客户端通过网络进行数据交互。...通过学习和实践这个示例,开发者能够掌握Java Web接口开发的基础知识,并有能力构建自己的Web服务。
"Java接口、内部类和Java_API基础" Java接口是Java语言中的一个抽象概念,它定义了一组方法的集合,但不提供实现。Java接口的主要特点是它不能被实例化,必须由其他类来实现。接口的声明格式为: ``` public ...
通过实现接口,类可以具备多种行为,并且能够在不修改原有代码的基础上扩展功能。接口的默认方法和静态方法进一步增强了其功能,使得接口不仅仅局限于定义抽象方法。理解并熟练运用接口类,对于编写高质量的Java应用...
【Java Spring Boot 接口工程】是现代Web开发中一种高效、便捷的框架组合,它将Java的强大功能与Spring Boot的简洁性融为一体,为开发者提供了快速构建可部署的服务的能力。这个工程的核心在于利用Spring Boot的自动...
API分为基础部分和扩展部分,随着技术的发展,这些接口不断升级,如从1.1x到1.2,再到当前常用的1.4、1.7版本。 Java有三个主要的体系: 1. JavaSE(Java2 Platform Standard Edition):标准版,适用于桌面应用和...
首先,理解Delphi 7调用Java接口的基础原理。这种通信通常依赖于Java的本地接口(JNI,Java Native Interface),它允许Java代码调用C/C++代码,而Delphi代码可以编译为C++兼容的库。因此,Delphi通过JNI桥接,可以...
在Java编程中,通过URL调用接口是一种常见的网络通信方式,尤其在Web服务和API交互中扮演着重要角色。这个项目提供了一种方法,通过URL发送请求并接收响应,然后将响应的字符串转换为JSON格式进行处理。接下来,我们...
这份"Java基础PPT"涵盖了Java编程的基础知识,对于初学者或希望巩固基础知识的开发者来说是宝贵的资源。PPT的重复标题暗示内容可能深入且全面,旨在系统地讲解Java的核心概念。 在Java的基础学习中,首先会接触到的...
本篇文章将详细探讨Java中的日期操作接口,特别是围绕"Java日期操作接口"这个主题,以及与之相关的`DateFilter.java`文件。 首先,Java中最基础的日期类是`java.util.Date`。这个类自Java 1.0起就存在,但它的设计...
在深入探讨Java中继承与接口的区别以及其产生原因之前,我们先明确两个概念的基本定义。在面向对象编程中,继承是一种使一个类继承另一个类的属性和方法的机制,允许子类扩展或重写父类的行为。接口则是一种定义行为...
使用`CreateJavaVM`函数初始化Java虚拟机(JVM),然后通过`FindClass`查找Java接口类,使用`GetMethodID`获取接口方法的ID,最后通过`CallObjectMethod`或`CallNonvirtualObjectMethod`来调用Java接口。 5. **传递...
Java的基础知识包括语法基础、面向对象编程以及高级编程接口,这些内容构成了Java开发入门到精通的核心。 **Java语法基础**是学习Java的第一步,涵盖了变量、数据类型、运算符、控制流(如if语句、for循环、while...
完整版java基础入门教程由浅入深讲解 Java语言编程基础 第06章 接口与包(共35页).ppt 完整版java基础入门教程由浅入深讲解 Java语言编程基础 第07章 数组与字符串(共20页).ppt 完整版java基础入门教程由浅入深...
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
【基于Java微信接口】是关于使用Java编程语言与微信官方...总的来说,基于Java微信接口的开发涵盖了从基础的Java编程到高级的Web服务交互,需要结合理论知识和实践操作,不断学习和尝试,才能成功搭建和使用微信接口。