我可能使用了错误的单词,所以如果我这样做,请告诉我,以便我能纠正它。基于我从Java层次结构中收集的内容,我只是按照我的想法调用它 但这是我的问题:
对于这个例子,我将解释我所看到的,提出问题,然后提供一个例子。 (我将使用Method
这个词,因为这是我认为合适的词,除非另有说明)
你知道如何拥有变量吗?为了这个例子,它是String
?现在,对于此字符串,您可以使用myString.setText("String");
或myString.equalsIgnoreCase(otherString);
等方法。
现在,对于我的问题,实际上是否可以创建自己的方法?
为了这个例子,让我们说myString.setText("Knife");
。既然我们知道myString
是一把刀,我可以创建一种方法,我可以调用myString
来查看它是否配备,或者使其配备?例如:myString.setEquipped(true);
如果我想检查它是否配备,我可以致电myString.getEquipped();
我是否正确使用了Method
这个词?如果我的原始问题成为可能,我们可以提供一个小例子吗?
提前感谢您的所有时间和工作。
答案 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
,然后判断它是否配备。这向我建议你想要一个类,其中每个类的实例都包含String
(text
)和boolean
(equipped
)
这就是我选择以我的方式编写示例的方式:您的对象需要与String
和boolean
建立“has-a”关系。这与“is-a”关系形成对比,因为对象实际上 <{1}}或String
是没有意义的。
但是,例如, 一个boolean
这个对象可能有意义。在这种情况下,您需要定义Weapon
类,然后extend该类包含Weapon
类,Knife
类,等等。
答案 2 :(得分:2)
仅通过
String
。然后是继承,您可以在其中派生类并添加方法。您可以使用大多数课程,但String
不是其中之一,因为它是final
。