2

我可能用错了词,所以如果我用错了,请告诉我,以便我更正。我只是根据我从 Java Hierarchy 中收集到的内容,按照我认为的名称进行说明。
但这是我的问题:

对于这个例子,我将解释我所看到的,提出问题,然后提供一个例子。(我将使用这个词Method,因为这是我认为合适的词,除非另有说明)

你知道你怎么能有一个变量,为了这个例子,它是一个String?现在对于这个字符串,您可以使用类似myString.setText("String");, 或的方法myString.equalsIgnoreCase(otherString);

现在,对于我的问题,实际上是否可以创建自己的方法?

为了这个例子,让我们说myString.setText("Knife");。现在,既然我们知道myString是一把刀,我是否可以创建一个方法来调用myString它以查看它是否已配备,或者让它配备?例如:myString.setEquipped(true);如果我想检查它是否配备,我可以打电话myString.getEquipped();

Method是否正确使用了这个词?如果我最初的问题是可能的,我们可以提供一个小例子吗?

提前感谢您的所有时间和工作。

4

3 回答 3

4

是的,你可以做所有这些,但我建议你使用你的 IDE 来生成这些方法。例如,如果你有。

public class Item {
    private final String name;
    private boolean equiped;
}

您的 IDE 可以为您生成这些方法。

public class Item {
    private final String name;
    private boolean equiped;

    public Item(String name) {
        this.name = name;
    }

    public boolean isEquiped() {
        return equiped;
    }

    public void setEquiped(boolean equiped) {
        this.equiped = equiped;
    }

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Item item = (Item) o;

        if (equiped != item.equiped) return false;
        return !(name != null ? !name.equals(item.name) : item.name != null);
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + (equiped ? 1 : 0);
        return result;
    }

    @Override
    public String toString() {
        return "Item{" +
                "name='" + name + '\'' +
                ", equiped=" + equiped +
                '}';
    }
}

你可以像这样使用它

Item knife = new Item("Knife");
knife.setEquiped(true);
System.out.println("Item is " + knife);
于 2013-05-23T17:17:59.293 回答
3

我认为您只是在寻找在 Java 中实现的面向对象编程的基础知识(是的,“方法”是正确的。)您希望使用一些修改其内部状态的方法来定义一个对象。举一个非常简单的例子:

public class MyObject {
    // Instance variables
    private String text;
    private boolean equipped;

    public MyObject() {
        // Default constructor
    }

    // setters
    public void setText(String text) {
        this.text = text;
    }
    public void setEquipped(boolean equipped) {
        this.equipped = equipped;
    }

    // getters
    public String getText() {
        return this.text;
    }
    public boolean isEquipped() {
        return this.equipped;
    }

    // main method
    public static void main(String[] args) {
        MyObject o = new MyObject();
        o.setEquipped(true);
        o.setText("Knife");
        System.out.println("Is 'o' equipped?");
        System.out.println(o.isEquipped());
        System.out.println("What is 'o'?");
        System.out.println(o.getText());
    }
}

正如其他人所说,您不能修改String class,因为它是final. 但是,您可以(并且应该!)定义自己的类,以及他们需要做的所有方法和对象。例如,在您给出的示例中,您希望能够设置对象的text,然后判断它是否配备。这向我建议你想要一个类,其中类的每个实例都包含一个String( text) 和一个boolean( equipped)

这就是我选择以我所做的方式编写示例的方式:您的对象希望与 和都有“ has-a ”关系。这与“ is-a ”关系相反,因为您的对象实际上a或 a是没有意义的。StringbooleanStringboolean

但是,例如,此对象可能是有意义的Weapon。在这种情况下,您可能希望定义一个Weapon类,然后用一个类、一个类等扩展该类。KnifeSword

于 2013-05-23T17:20:51.907 回答
2

仅通过

  1. 反射,这不是你真正想做的
  2. 修改原始来源。在大多数情况下,您不能修改String.

然后是继承,您可以在其中派生一个类并添加方法。大多数课程都可以,但String不是其中之一final

于 2013-05-23T17:16:08.030 回答