当前位置: 首页 > 知识库问答 >
问题:

如何在类上使用具有不同参数的抽象方法?

夏侯鹏
2023-03-14
public abstract int attack(Object object); // here is my abstract method from Character class



public int attack(Hero hero){ // this method from monster class
    int currentHeroHealth;
    int reducedDamage;
    System.out.println("You have been attacked by monster!");
    int attackDamage = getAttackDamage();
    int attackSpeed = getAttackSpeed();
    int attack = attackDamage * attackSpeed;

    if(attack<hero.getArmor()){
        reducedDamage=hero.getArmor()-attack;

    }
    else{
        reducedDamage=attack-hero.getArmor();

    }
    currentHeroHealth=hero.getHealthPoints()-reducedDamage;
    hero.setHealthPoints(currentHeroHealth);
    return currentHeroHealth;

}




public int attack(Monster monster) { // this method from hero class
    System.out.println("You attacked to monster!");


    int currentMonsterHealth=monster.getHealthPoints()-HitPoints;
    if(currentMonsterHealth==0){
        System.out.println("You defeated the monster"+monster.getName());
        monster.setHealthPoints(0);
    }
    else {
        monster.setHealthPoints(currentMonsterHealth);

    }
    return currentMonsterHealth;
}

共有1个答案

宗政德宇
2023-03-14

您正在寻找Java泛型。这是一个例子:

public abstract class Charachter<T> {
    public abstract int attack(T object);
}

您声明类character要使用T类型的参数进行参数化。

public class Monster extends Character<Hero> {
    @Override
    public int attack(Hero object) {
        //your implementation
    }
}

您声明您的Monster类使用类型Hero扩展基类,这样参数将为Hero

public class Hero extends Character<Monster> {
    @Override
    public int attack(Monster object) {
        //your implementation
    }
}
 类似资料:
  • 想象一下,我有一个抽象类动物的方法: 然后我有一个类,用以下内容扩展这个抽象类: 我希望每个扩展Animal的类都有一个fetch()方法。然而,fetch方法为相关动物指定了一些独特的特征(狗的爪子、猫的爪子等)。例如,cat的fetch()将获取参数fetch(fellinecat kitty)并表示: 因此,抓取方法接受了扩展抽象类“动物”(因此是动物)的参数。我在“动物”中定义了抓取()方

  • 所以,问题是:我有一个抽象基类(),它有一个抽象成员方法()。方法返回布尔值,并应检查是否相等,但“相等”在子类中可能有不同的解释,因此我不重写或。因为它测试是否与另一个与其类型相同的对象相等,所以签名如下所示: 现在,当我试图在类中重写它时,假设“”,我不能使用作为参数的类型。我知道一般情况下这样做的原因和添加类型界限的建议,但是事情变得更加复杂,因为参数类型是它自己的类。 有没有什么平滑的方法

  • 问题内容: 当其中的所有方法都是具体的时,有人在声明类抽象时有一些实际的编程情况吗? 问题答案: 好吧,您可能正在使用模板方法模式,其中存在多个都具有默认实现的覆盖点,但是组合的默认实现本身不合法-任何功能实现都必须是子类。 (是的,我不喜欢模板方法模式;)

  • 只是延伸问题... 抽象类和接口中的相同方法 假设一个类实现了一个接口并扩展了一个抽象类,两者都有相同的方法(名称签名),但返回类型不同。现在,当我重写方法时,只有当我使返回类型与接口声明相同时,它才会编译。 另外,如果该方法在抽象类或接口中声明为private或final,会发生什么情况? **旁注。在一次采访中,爱因斯坦先生在这个问题上坚持了相当长的时间。有没有一个流行的场景,我们这样做,或者

  • 我不熟悉泛型。我有一个抽象类(1)和一个抽象方法。我有另一个抽象类(2)和一些抽象方法,我希望在一些DTO(3,4)中共享这些抽象方法。我想要一个(1)的具体扩展来处理任何扩展(2)的东西。 1. 扩展StagingError的两个类:3.

  • 问题内容: 我想验证以下行为的方法如下。 在我的@Test类中,我希望做这样的事情来验证是否使用“ exception.message”和再次使用“ exception.detail”进行了调用 但是Mockito抱怨​​如下 我如何告诉Mockito检查两个值? 问题答案: 进一步的阅读使我尝试使用ArgumentCaptors和以下作品,尽管比我想要的更为冗长。