new*_*bie 4 java encapsulation getter-setter
美好的一天!
我正在阅读一本关于封装的Java书,它提到了getter和setter方法.
我已经读过要隐藏属性,我必须将我的实例变量标记为"PRIVATE"并使用"PUBLIC"方法getter and setter来访问数据.所以我尝试制作一个类似但不是传统的代码,如下所示:
public class AddressBookEntry {
private String name;
private String address;
private String telNo;
private String email;
public void getAllInfo() {
name = JOptionPane.showInputDialog("Enter Name: ");
address = JOptionPane.showInputDialog("Enter Address: ");
telNo = JOptionPane.showInputDialog("Enter Tel. No: ");
email = JOptionPane.showInputDialog("Enter Email Address: ");
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是否暴露了我的变量,因为我直接分配了它?我怎么能做得更好?如果我getter and setter改为使用传统方法并将值分配给其他类,会不会更好?"隐藏数据"是什么意思?
谢谢.
您可以使用setter和getter使变量可以从类外部访问.在你的例子中,你将拥有
public class AddressBookEntry {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
您将从UI类访问name属性(在同一个类中混合UI和业务逻辑并不好):
public class MyPane extends JFrame {
public getAllData() {
String name = JOptionPane.showInputDialog("Enter Name: ");
AddressBookEntry entry = new AddressBookEntry();
entry.setName(name);
// You can't use entry.name = name
}
}
Run Code Online (Sandbox Code Playgroud)
是的,不是.封装的关键是它可以防止其他类需要知道你的类在幕后做了什么.如果您存储name在一个String(如你在这里所做的),读/从它写入文件,或做不同的事情,封装的一点是,你的类的用户也不要紧,因为所有他们看到的是String getName( )和void setName (String name).
由于数据的修改完全在您的类的控制之下,因此它不会破坏封装.如果你确实存储name到文件,那么你可能会这样做,getAllInfo而没有任何其他类的用户更聪明.由于来自类外部的可观察行为仍然隐藏了类的内部正在做什么,它仍然被封装.
也就是说,这是一种非常规的方法.就像我在第一段中描述的那样,使用访问器方法(getter和setter)是一种更惯用的方法,对于使用您的代码的其他人来说更容易理解.你可以做你做的事情,它不会破坏封装,但它不是我称之为优雅或典型的东西.
| 归档时间: |
|
| 查看次数: |
7690 次 |
| 最近记录: |