创建自己的方法?

时间:2013-05-23 17:14:16

标签: java methods

我可能使用了错误的单词,所以如果我这样做,请告诉我,以便我能纠正它。基于我从Java层次结构中收集的内容,我只是按照我的想法调用它 但这是我的问题:

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

你知道如何拥有变量吗?为了这个例子,它是String?现在,对于此字符串,您可以使用myString.setText("String");myString.equalsIgnoreCase(otherString);等方法。

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

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

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

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

我认为你只是在寻找object-oriented programming的基础知识,因为它们是用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,然后判断它是否配备。这向我建议你想要一个类,其中每个类的实例都包含Stringtext)和booleanequipped

这就是我选择以我的方式编写示例的方式:您的对象需要与Stringboolean建立“has-a”关系。这与“is-a”关系形成对比,因为对象实际上 <{1}}或String是没有意义的。

但是,例如, 一个boolean这个对象可能有意义。在这种情况下,您需要定义Weapon类,然后extend该类包含Weapon类,Knife类,等等。

答案 2 :(得分:2)

仅通过

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

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