封装概述
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
1.隐藏实现细节,提供公共的访问方式
2.提高了代码的复用性
3.提高安全性。
Java封装实例
class Student{
String name;
private int age; //将age属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
public void show(){
System.out.println("名字: " + name);
System.out.println("年龄: " + age);
}
public void getAge(int a){
age = a;
}
}
class StudentDemo{
public static void main(String[] args){
Student s = new Student();
s.show();
System.out.println("-------------------");
//给成员变量赋值
s.name = "李冰冰";
//通过方法赋值
s.getAge(27);
s.show();
}
}
private关键字
是一个权限修饰符,可以修饰成员变量和成员方法,被其修饰的成员只能在本类中被访问。
例1:不能访问私有的成员变量
class demo{
int num = 10;
}
class PrivateDemo{
public static void main(String[] args){
demo d = new demo();
System.out.println(d.num);
}
}
输出结果:
C:\Users\Dell\Desktop\study>java PrivateDemo
10
class demo{
private int num = 10; //用private修饰
}
class PrivateDemo{
public static void main(String[] args){
demo d = new demo();
//不能访问私有的成员方法
System.out.println(d.num);
}
}
输出结果:
C:\Users\Dell\Desktop\study>javac PrivateDemo.java
PrivateDemo.java:8: 错误: num可以在demo中访问private
System.out.println(d.num);
^
1 个错误
程序报错了,因为用了private关键字修饰,只能通过公共方式访问。
修改程序:
class demo{
private int num = 10; //用private修饰
public void show(){
System.out.println(num);
}
}
class PrivateDemo{
public static void main(String[] args){
demo d = new demo(); //通过公共方式进行访问
d.show();
}
}
例2:不能访问私有的成员方法
class demo{
private void method(){ //定义method成员方法
System.out.println("method");
}
}
class PrivateDemo{
public static void main(String[] args){
demo d = new demo();
d.method(); //不能访问私有的成员方法
}
}
程序会报错:
C:\Users\Dell\Desktop\study>javac PrivateDemo.java
PrivateDemo.java:11: 错误: method()可以在demo中访问private
d.method();
^
1 个错误
修改程序:
class demo{
private void method(){ //定义method成员方法
System.out.println("method");
}
public void function(){
method();
}
}
class PrivateDemo{
public static void main(String[] args){
demo d = new demo();
d.function();
}
}