今天写了关于C++中友元函数的实验总结。想到数据成员的封装。
就像在Java中,对每个数据成员都应该声明为private。在JavaBean中更应该如此。
例如:
public class Person { private String name; private String password; public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public String getPassword() { return password; } } |
把所有的成员变量全部声明为private,在通过getter和setter方法来对其进行访问和修改。
在非JavaBean的类中,应当提供getter方法来获取属性,而对setter的提供则应该仔细的设计,也
可以说是认真的考虑。以防止破坏其对成员属性的修改。
注:
成员属性和类属性的区别:
class Person { private String name; private String password; public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public String getPassword() { return password; } }
public class TestPerson { private Person person; //此处的person即为类属性 } |
成员属性:普通的成员变量(八种基本返回类型中的一种)
类型性:返回值是类的成员变量
如果类中的成员方法只打算供类中的成员方法使用,而不打算作为客户类访问该类的接口,则
需要将方法声明为private,以得到将其掩藏的目的。例如Servlet中可以提供一个辅助方法processRequest()
来实现其中的doGet()方法和doPost()方法等。
例如:
import javax.servlet.*; import javax.servlet.http.*; import java.io.*;
public class ServletTest extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { processRequest(request,response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { processRequest(request,response); } private void processRequest(HttpServletRequest request, HttpServletResponse response) { //write your code } } |
四种访问权限的区别:
1. private 拥有最低的访问权向,只可以被类中的成员访问
2. 默认访问权限 可以当前包中的所有类访问
3. protected 可以被当前包以及其子类中的成员访问
4. public 可以被所有的类访问,拥有最高的访问权限,不应该将类的成员变量声明为public。
访问权限大小比较:
private è 默认权限 è protected è public
类的封装及其掩藏:
1. 抽象方法以及接口可以实现对子类的掩藏(策略模式以及工厂模式等)
例如:
public interface Person
public class Man interface Person
public void func(Person person) |
如此般,方法中提供接口,这样,就可以利用面向对象的多态性来进行对子类的掩藏以及动态绑定。
总结:1. 尽量只针对接口(抽象)编程,而不针对具体的类来进行编程
2. 将所有的数据成员乃至类成员都声明为private,在通过提供setter方法和getter方法来实现对
数据成员的访问和修改
3. 在有特殊需求的时候才使用抽象类,否则竟可能使用接口