目录
前言
- 早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2=4,通过设计一个算法就可以解决当时的问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。
- 一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数宇建模。
- 通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。
- 同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。面向对象是指一种程序设计范型,同时也是一种程序开发的方法。
一、封装是什么?
1.封装的概念
封装是面向对象三大特征之一,是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的。
- 将属性私有化,提供公有方法访问私有属性。
- 通过这些公有方法访问私有属性。
2.封装的原则
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过改类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()和setXxx()方法。
二、如何进行封装?
1.private关键字
① 是一个权限修饰符。
② 可以修饰成员(成员变量和成员方法)。
③ 作用保护成员不被别的类使用,被private修饰的成员只在本类中才能访问。
2.private关键字的使用
//修饰成员变量
private String title;
private int pageNum;
//修饰成员方法
private void c() {
System.out.println("cc");
}
针对被private修饰的成员变量,如果需要被其他类使用,提供相应的操作 :
① 提供"get变量名()"方法,用于获取成员变量的值,方法用public修饰。
② 提供"set变量名(参数)"方法,用于设置成员变量的值,方法用public修饰。
3.this关键字
this修饰的变量用于指代成员变量
① 方法的形参如果于成员变量同名,不带this修饰的变量指的是形参而不是成员变量。
② 方法的形参没有与成员变量名,不带this修饰的变量指的是成员变量。
4.setXxx() / getXxx()方法
- get变量名()
- set变量名(参数)
[注] getXxx() / setXxx() 方法,get和set后的变量名首字母大写。
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
set和get方法可以自己键盘输入,也可以按ALT+INSERT快捷键输入(熟练以后),写完被privat修饰的成员变量后,按下ALT+INSERT后出现这个界面,选择相对应的。
添加方法的时候把带参和无参的方法都要写上,因为如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法。推荐无论是否使用都手动书写无参数构造方法。
5.例子
public class Demo {
private String hobby;
private String name;
private int age;
//无参
public String getHobby() {
return hobby;
}
//有参
public void setHobby(String hobby) {
this.hobby = hobby;
}
//无参
public String getName() {
return name;
}
//有参
public void setName(String name) {
this.name = name;
}
//无参
public int getAge() {
return age;
}
//有参
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "我叫" + name + ",今年" + age + "岁," + "爱好" + hobby;
}
}
测试类:
package Mar0328.fengzhuang;
public class Test {
public static void main(String[] args) {
Demo d = new Demo(); //创建一个Demo类的对象命名为d
d.setName("费迪南德"); //调用set方法给其赋值
d.setHobby("开赛车"); //调用set方法给其赋值
d.setAge(18); //调用set方法给其赋值
System.out.println(d); //输出语句
}
}
结果:
我叫费迪南德,今年18岁,爱好开赛车
Process finished with exit code 0
三.封装的优点
- 通过方法来控制成员变量的操作,提高了代码的安全性。
- 把代码用方法进行封装,提高了代码的复用性。
- 减少耦合: 可以独立地开发、测试、优化、使用、理解和修改
- 减轻维护的负担: 可以更容易被程序员理解,并且在调试的时候可以不影响其他模块
- 有效地调节性能: 可以通过剖析确定哪些模块影响了系统的性能
- 降低了构建大型系统的风险: 即使整个系统不可用,但是这些独立的模块却有可能是可用的