一、什么是面向对象
面向对象是相对于面向过程而言的。面向过程的开发思路是,当解决一个问题时,首先要分析第一步该做什么,第二步再做什么,其实质就是分析出解决问题的步骤,然后用一个一个函数把这些步骤全部实现,最后按一定的顺序执行这些函数即可。而面向对象的思维则是首先分析该问题中包含哪些类(class)和对象(Object),其次分析这些类和对象应具有哪些属性(attribute)和方法(method),然后分析类与类之间的关系,最后让每个对象执行自己的方法,从而解决实际问题。
二、什么是封装
面向对象具有三大基本特征,分别是封装、继承和多态。其中封装就是将类的属性和实现细节隐藏在类内部,不允许外界直接访问,只能通过该类提供的公共方法来实现对属性的访问和操作。
三、封装的优点
1、 良好的封装能够降低代码的耦合性。 2、 隐藏类的实现细节,提高代码的可维护性和可扩展性。 3、 可以对成员变量进行更精确的控制。 4、 方便数据校验,限制外界对数据的不合理访问,保护对象的完整性。
四、Java实现封装的方式
Java语言通过访问修饰符来实现封装,使用访问修饰符来对类、变量、方法和构造方法的访问进行控制。Java 支持 4 种不同的访问修饰符:
- default (默认):在同一包中可见,不使用任何修饰符,可修饰类、接口、变量和方法。
- private(私有):在同一类中可见,可修饰变量、方法,不能修饰类(外部类)。
- public (公共): 对所有类可见,可修饰类、接口、变量和方法。
- protected (受保护的):对同一包中的类和所有子类可见,可修饰变量和方法,不能修饰类(外部类)。
我们可以通过下表来详细说明访问权限的控制范围:
| 修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他类 |
|---|---|---|---|---|---|
| private | y | N | N | N | N |
| default | y | y | y | N | N |
| protected | y | y | y | N | N |
| public | y | y | y | y | y |
五、Java实现封装的步骤
1、修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Student{
private String name;
private int age;
}
这段代码中,将 name和age属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。 2、为每个属性创建一对赋值方法(setter)和取值方法(getter),用于对这些属性的访问,例如:
public class Student{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。 3、在赋值和取值方法中,加入对属性值的存取限制。
public class Student{
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
if(age <= 0 || age >150){
System.out.println("您输入的年龄不合法");
}else{
this.age = age;
}
}
public void setName(String name){
this.name = name;
}
}
六、小结
在实际项目开发过程中,一定要设法使用封装来降低代码的耦合性,增强代码的可维护性和可扩展性。