下一篇持续更新中… 如有错误欢迎指正!!!
文章目录
1. 面向对象的封装性
1.1 封装的好处
面向对象包括三大特征:
- 封装
- 继承
- 多态
当前主要讲解的是封装机制。为什么要封装,封装有什么好处?
- 封装之后对于那个事物来说,看不到这个事物比较复杂的那一面,只能看到该事物简单的那一面。复杂性封装,对外提供简单的操作入口。照相机就是一个很好的封装的案例,照相机的实现原理非常复杂,但是对于使用照相机的人来说,操作起来是非常方便的,是非常便捷的。像电视机也是封装的,电视机内存实现非常复杂,但是对于使用者来说,不需要关心内部的实现原理,只需要会操作遥控器就行。
- 封装之后。才会形成真正的对象。真正的独立体。
- 封装就意味着以后的程序可以重复使用,并且这个事物应该适应性比较强,在任何场合都可以使用
- 封装之后,对于事物本身提高了安全性。【安全级别高】
package com.sypowermode.javase.day09.test001;
/**
* 用户类
*/
public class User {
//年龄
int age;
}
package com.sypowermode.javase.day09.test001;
public class UserTest {
/**
* 用户测试类
*
* 对于当前程序来说,User中的age属性在外部程序中可以随意访问,
* 导致age属性的不安全 一个user对象表示一个用户,用户的年龄不可能为负数
* 以下程序当中年龄值为负数,程序运行的时候并没有报错。 这是当前程序存在的缺陷
*/
public static void main(String[] args) {
// 创建User对象
User user = new User();
// 访问age
// 读取年龄值【get】
System.out.println("该用户年龄:" + user.age);
// 修改年龄值
user.age = 20;
// 读取年龄值【get】
System.out.println("该用户年龄:" + user.age);
// 修改年龄值
// 这里的age属性显然是完全暴露给外部程序的。对于程序员来说,可以操作user对象当中所有的细节,导致user中部分数据不安全。
// 不建议这样,建议user类型进行封装,建议在外部程序中不能随意访问user对象当中的属性。这样可以保证属性的安全。
user.age = -100;
// 读取年龄值【get】
System.out.println("该用户年龄:" + user.age);
}
}
1.2 封装的步骤:
-
所有属性私有化,使用private关键字进行修饰。private表示私有的,修饰的所有数据只能在本类中访问。
-
对外提供简单的操作入口。也就是说,以后外部程序要想访问age属性,必须通过这些简单的入口进行访问:
回想一下,一个属性通常访问的时候包括几种访问形式?
- 第一种方式:想读取这个数据的值,读取 get
- 第二种方式:想修改这个属性的值,修改 set
- 对外提供两个公开的方法,分别是set方法和get方法
- 想修改age属性,调用set方法
- 想读取age属性,调用get方法
需要大家先背会以下内容,以后会讲:
- setter 和 getter 方法没有static关键字
- 有static关键字修饰的方法怎么调用:类名.方法名(实参);
- 没有static关键字修饰的方法怎么调用:引用.方法名(实参);
- set方法的命名规范:
public void set+属性名首字母大写(形参){
}
public void setAge(int a){
age = a;
- get方法的命名规范:
public int getAge(){
return age;
}
- 如何通过代码体现?
public class User {
// 属性,私有化
private int age;
// set方法没有返回值,因为set方法只负责修改数据
/*
* public void setAge(int age){ age =
* age;//java有就近原则,这里其实并没有给age属性赋值,这里的age都是局部变量age }
*/
// setter
public void setAge(int a) {
// 编写业务逻辑代码,进行安全控制
// age = a;
if (a < 0 || a > 150) {