热门标签 | 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高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • TICortexM3串口转以太网例程上层应用的基础是lwIP,版本是V1.3.2。对于lwIP,陌生的同学可以到网上查查,它是是瑞士的Adam编写的一个开源TCPIP协 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了Java中Currency类的getInstance()方法,该方法用于检索给定货币代码的该货币的实例。文章详细解释了方法的语法、参数、返回值和异常,并提供了一个示例程序来说明该方法的工作原理。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
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社区 版权所有