热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正确使用Java接口

如何解决《正确使用Java接口》经验,为你挑选了1个好方法。

我最初创建了一个包含将在两个类之间共享的所有方法的接口,但是,我意识到我希望这两个类具有相同的方法,但它们的行为会有所不同.

它们具有相同的返回类型,但参数不同.我无法弄清楚如何实现这一点,或者即使我确实弄清楚如何实现这一点,我不知道它是否是处理这种情况的正确方法

基本上,我来到这里寻找正确的架构方法来解决我想要完成的事情,我不知道那会是什么.我想我有4个问题来确定代码架构:

    这是一个正确的接口,如果是这样,为什么?

    这是一个抽象类正确的方法,如果是这样的话为什么呢?

    这似乎是OOP的一个共同主题,我的意思是拥有一个函数,你可以在特定的类中表现出不同的行为.如何设计代码?

    最后,我的第一个想法是,"哦,我将覆盖其中一个类中的方法",但这给了我一个巨大的麻烦,并没有工作.我觉得在尝试覆盖方法时我从未遇到过这种麻烦.从界面覆盖一个方法更复杂?

public interface Character {
    public void setAttack();
}

/*the setAttack method here will be set by the programmer. The 3 values 
 passed by the programmer are then stored into an array*/
public class Player implements Character {
  public void setAttack(int x, int y, int z) {

    attackArray[0] = x;
    attackArray[1] = y;
    attackArray[2] = z;
  }
}

/*the setAttack will still serve the same purpose as the setAttack in the 
 player class, however, the values will be auto generated randomly once the 
 setAttack function is called for the NPC instance.*/

/*Another thought I had is passing the function that auto generates the 3 
integer values (numGen()) as a parameter 3 times, however, I'm not sure if 
this is possible. Just a thought*/


public class NPC implements Character {
  public void setAttack(){

      for(int i = 0; i 

GhostCat say.. 6

存在一个概念上的误解:使用相同的方法不仅仅意味着实现具有相同名称的方法.

当您在Java中使用多态和接口时,您就表达了意图.如:实现某些接口的类必须提供相应的"功能".换句话说:这描述了某种行为.

事情是:当界面有foo(),并且不同的类可能想要一个foo(X),foo(Y)然后真正的问题是:这些方法有多个共同点而不仅仅是名称?!

如果是这样,一个可能的解决方案将是另一层抽象.在你的情况下,像:

public interface AttackParameters {
...


public interface Character {  
  public void setAttack(AttackParameters parms);

或类似的东西.我们的想法是再次用通用解决方案替换"特定"细节.

或者,您可以MapsetAttack()方法使用参数.换句话说:攻击参数由字符串标识.

这很好,很动态,但它也避免了编译时的安全性.稍微好一点的map方法不会使用Strings作为键,而是使用一些枚举类.



1> GhostCat say..:

存在一个概念上的误解:使用相同的方法不仅仅意味着实现具有相同名称的方法.

当您在Java中使用多态和接口时,您就表达了意图.如:实现某些接口的类必须提供相应的"功能".换句话说:这描述了某种行为.

事情是:当界面有foo(),并且不同的类可能想要一个foo(X),foo(Y)然后真正的问题是:这些方法有多个共同点而不仅仅是名称?!

如果是这样,一个可能的解决方案将是另一层抽象.在你的情况下,像:

public interface AttackParameters {
...


public interface Character {  
  public void setAttack(AttackParameters parms);

或类似的东西.我们的想法是再次用通用解决方案替换"特定"细节.

或者,您可以MapsetAttack()方法使用参数.换句话说:攻击参数由字符串标识.

这很好,很动态,但它也避免了编译时的安全性.稍微好一点的map方法不会使用Strings作为键,而是使用一些枚举类.


推荐阅读
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
author-avatar
jx轩宝妈咪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有