【问题标题】:Adding a method from another class从另一个类添加方法
【发布时间】:2020-11-25 08:21:13
【问题描述】:

目前,我有 3 个类:Weapon.java、Warrior.java 和 Game.java。我正在尝试从 Weapon.java 访问打击方法。我假设我必须调用类,然后调用罢工方法,但不知道该怎么做。

public class Weapon {
    // Part 1 of ICE16

// 3 properties: String type, int power, and String strikeMessage 
private String type = ""; 
private int power; 
private String strikeMessage; 

// In class Weapon, create a constructor that assigns values to each of these internal private properties of the class in the order above. 
public Weapon (String type, int power, String strikeMessage) {
    this.type = type; 
    this.power = power; 
    this.strikeMessage = strikeMessage; 
}

// Method 1
public int getPower() {
    return power; 
}

// Method 2 
public void strike() {
    System.out.println("Weapon of type " + type + " has power " + power);
    System.out.println(strikeMessage);
}

// Method 3
public void setPower(int power) {
    this.power = power; 
}

}

public class Warrior {
// Part 2 of ICE16

// 4 properties: int age, String name, int expLevel, Weapon weapon 
private int age = 0; 
private String name = ""; 
private int expLevel = 0; 
private Weapon weapon; 

// Create a constructor that assigns each value to the property 
public Warrior(int age, String name, int expLevel, Weapon weapon) {
    this.age = age; 
    this.name = name; 
    this.expLevel = expLevel; 
    this.weapon = weapon; 
}

// Method 1 
public void attack() {
    System.out.println("Warrior, " + name + " with experience level " + expLevel + "attacks!");
} 

// Call strike method from Weapon.java


// Method 2 
public void assignWeapon(Weapon weapon) {
    this.weapon = weapon; 
}

【问题讨论】:

  • 我不知道你想在攻击期间用你的武器攻击,所以,在attack()方法中,尝试添加this.weapon.strike()

标签: java class methods


【解决方案1】:

Warrior 类有一个 Weapon 成员,您可以使用它来调用方法:

weapon.strike();

【讨论】:

    【解决方案2】:

    你已经拥有了大部分。在你的attack() 方法调用武器的strike()

    public void attack() {
        this.weapon.strike();
        System.out.println("Warrior, " + name + " with experience level " + expLevel + "attacks!");
    } 
    

    【讨论】:

      【解决方案3】:

      通过将 Weapon 类设为基类来扩展它,然后您的子类继承 Weapon 类的所有公共成员

      public class Warrior Extends Weapon

      在调用strike方法之前,创建一个Weapon类的对象,将正确的参数传递给构造函数

      Weapon j = new Weapon("gun", 25, "very deadly");

      然后你可以继续使用对象引用变量调用strike方法

      j.strike();

      【讨论】:

      • 这没关系,但我认为组合应该是首选的方式而不是继承。这种方式可以更改武器,并且可以将攻击方法委托给分配的武器。
      猜你喜欢
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      相关资源
      最近更新 更多