我一直在为大学项目做作业。有一点,当你真正使用构造函数方法来实现相同的结果时,我对getter和setter的实际使用感到困惑。我搜索过并找到了很多答案,但不能令人满意的解释。 我有laptop.java如下
public class laptop {
private String model;
public laptop(String brand){
model=brand;
}
public String toString(){
return "Laptop Brand is: "+ model;
}
}
和将构造函数调用为
的laoptopRecords.javapublic class laptopRecords {
public static void main(String[] args) {
// TODO Auto-generated method stub
laptop laptop1=new laptop("Dell");
System.out.println(laptop1);
}
}
这里我没有使用getter和setter方法,每个笔记本电脑对象都得到了理想的结果。
如果我以另一种方式使用laptopRecord.java中的getter和setter方法,如下所示,我得到相同的结果。但是我没有得到getter和setter方法的用法,如果实际上我们也可以使用构造函数来实现结果。
带有getter和setter的laptop.java
public class laptop {
private String model;
public laptop(String brand){
model=brand;
}
public void setlaptop(String brand){
model=brand;
}
public String getlaptop(){
return model;
}
public String toString(){
return "Laptop Brand is: "+ model;
}
}
答案 0 :(得分:3)
吸气者总是很好。如果你忘记了你在创作时设置的品牌,那么有一种方法可以让它从这个对象中脱颖而出。如果从其他地方获得该对象怎么办?使用吸气剂确定品牌很容易。但是吸气剂应该仅适用于直接暴露的值。如果不应公开知道,则无需为internalVersionString
创建一个getter。但是对colour
有一个吸气剂会很好......毕竟,你可以通过查看笔记本电脑来看到颜色(这对于OOP来说是一个不好的比喻,但它适合恕我直言)。< / p>
关于setter ...如果你只有一个属性,那么确实没有太多的(可见的)差异。但除此之外还有一个更深层次的主题......可变性。当然,使用构造函数比简单地设置属性(为整个新对象获取内存而不是为字符串获取内存)具有更大的开销。
不使用setter的一个很好的例子是Java中的String
类。 Java String
是不可变的;一旦创建,它就无法改变。如果要替换字符或删除某些部分,您获得的不是更改的字符串,而是具有所需更改的全新字符串。但是,如果您有一个名为TextDocument
的类,其中包含整个文件的数据,该怎么办?
TextDocument
的情况下替换那部分部分。
自动设置setter意味着你的对象是可变的;这意味着,您的对象在创建时不会被修复,但可以在以后更改。 ArrayList
就是一个很好的例子。您当然不希望仅为更改单个值分配一个全新的列表。
使用像laptop
类这样的简单案例时,mutable和immutable之间的区别并不明显。使用不可变类在进行并行工作时会派上用场,在处理需要大量内存分配的大对象时,使用可变类会派上用场。
对于这个问题,没有一个万能的解决方案。但是对于应该可以直接更改的公开属性,setter会很方便,而不必构造一个全新的对象。想象一下具有多个属性的类......例如,以laptop
为例,拥有品牌,大小,颜色等等。如果你只想改变颜色,必须构建一台新的笔记本电脑并复制所有其他属性将是乏味的,不是吗?在这种情况下,setter会让你的生活更轻松。只需致电yourLaptop.setBrand("Dill");
并继续使用该笔记本电脑即可。没理由花500块钱(或者更确切地说......字节)换另一块钱。
答案 1 :(得分:2)
我告诉你一个简单的方法:
getters()和setters():
<强> 构造(): 强>
答案 2 :(得分:0)
扩展具有私有数据成员的类时,则getters和setters方法将帮助您访问子类中的数据成员。而构造函数仅初始化数据成员。
答案 3 :(得分:0)