什么是封装呢?封装是指将类的某些信息隐藏在类的内部,不允许外部程序直接访问, 通过该类提供的方法来实现对隐藏信息的操作和访问 也就是说,封装是指,将实体特征的类、方法、属性隐藏起来,对象与外界仅通过公共方法进行交流。
这样可以提高程序的可靠性、安全性,改善程序的可维护性。 总结起来就是两点: 1.只能通过规定的方法来访问数据。 2.隐藏类的实例细节,方便修改和实现
封装的操作:封装的三步走:
Java 提供 public、protected、private、默认等 4 种访问
控制符,在类、成员变量、成员方法的前面均可以使用访问控制符关键字,没有显式使用的为默认控制类型。
这四种修饰符详解如下:
public 访问权限最具有开放性,可以用来修饰类、类与接口的成员(包括成员变量、 成员方法)。由 public
类修饰的类或类成员可被任何类访问,他们既可以位于同一个包中,也可以位于不同包中。修饰为 public
的类可以被其他任何类及成员方法访问和引用。Java文件名应与修饰为 public 的类名相同。修饰为 public
的类成员变量或方法,可以在其他类中无限制地访问该成员。
protected 可以用来修饰类的成员变量或方法。具有 protected
访问特性的类成员可以被本类、本包中的其他类访问,也可以被其他包中的子类继承,它的可访问性低于 public,高于默认。
如果在定义类、接口、成员变量、成员方法时没有指定访问权限控制符,他们的权限
就为默认权限。具有默认权限的类、接口、成员变量、成员方法,只能被本类和同一个包中的其他类、接口及成员方法引用,因此默认权限也被称为包权限。
私有访问控制符 private 用来声明类的私有成员,它提供了最高的保护级别。用
private修饰的成员变量或方法只能被该类自身所访问和修改,而不能被任何其他类(包括该类的子类)来获取和引用。
需要注意的是:为了保证数据的隐藏性和安全性,不建议把所有的成员变量或方法全部设置为 public,通常只将公共类或公共接口的成员方法指定为 public。
结构我们用实例来说明:
//用private修饰 private int id; //省略修饰 String title; //protected修饰 protected int master; //public修饰 public String content;
这就是修饰符修饰属性的结构,下面我们以private为例举例修饰符修饰方法时的结构:
//该方法为打印传入的字符串 private void printThisChar(String string){ System.out.println(string); } /*其他修饰符结构也相同, 将private改为其他修饰符即可*/
这样就可以实现可见性的控制
第二步,编写getter、setter方法
getter,setter方法用于对属性的读写,我们还是用实例来看看这种方法的结构
//getter方法获取属性数据 public int getId() { return id; } //用setter方法写入,编辑对象属性 public void setId(int id) { this.id = id; }
这样我们就写好了getter和setter方法
接下来我们还是用实例来说明引用的结构用法
//创建student对象 Student student = new Student(); //编辑对象ID属性 student.setId(10); //获取ID属性,并接受 int ID = student.getId(); //打印ID System.out.println(ID);
运行结果是10.
当然,如果该属性不需要对其他区域使用的话,getter,setter方法也就不需要写了。
其实,如果使用idea或者eclipse等工具的话,是没有必要一个字母一个字母敲,它们可以帮助我们直接写出方法,我们以idea为例来说一下步骤:
首先,准备好你要生成getter和setter方法的属性,然后按下Alt + Insert,就会弹出一个窗口
我们选择点击Getter and Setter,当然,如果只想写其中一个的话,也可以选择一个。这样又弹出来一个窗口,
我们选择要创建方法的属性(可以多选),点击OK,就OK了。
当然,如果不满意自动写成的方法的话,自己可以修改。
除此之外,在空白的地方点击右键,选择点击Generate,然后就和上面的步骤一样了。
第三步,在getter、setter方法中添加属性控制语句。
getter方法和setter方法还有一个很大的功能就是能够对用户传入读取的数据进行筛选,有效地控制类型,进一步降低异常出现的几率。,我们以实例代码来说明
//如果1-100为合法id,能够正常输入,否则抛出异常 public void setId(int id) { if (id > 100 || id < 1){ throw new RuntimeException("ID范围不合法"); } this.id = id; } //getter方法也可以这样使用43
这样我们就可以更加准确的控制用户的行为,避免出现漏洞。