Java基础 第二节 第二课
封装概述
概述
面向对象编程语言是对客观世界的模拟. 客观世界里成员变量都是隐藏在对象内部的, 外界无法直接操作和修改. 封装可以被认为是一个保护屏障, 防止该类的代码和数据被其他类随意访问. 要访问该类的数据, 必须通过指定的方式. 适当的封装
原则
将属性隐藏起来, 若需要访问某个属性, 提供公共方法对其进行访问.
封装的步骤
- 使用 private 关键字来修饰成员变量
- 对需要访问的成员变量, 提供对应的一对 getxxx 方法, setxxx 方法
封装的操作 – private
private 的含义
- private 是一个权限修饰符, 代表最小权限
- 可以修饰成员变量和成员方法
- 被 private 修饰后的成员变量和成员方法, 只在本类中才能访问
private 的使用格式
private 数据类型 变量名 ;
- 1
使用 private 修饰成员变量, 代码如下:
public class Student {
private String name;
private int age;
}
- 1
- 2
- 3
- 4
提供 getxxx 方法 / setxxx 方法, 可以访问成员变量, 代码如下:
public class Student3 {
private String name;
private int age;
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
封装优化1 – this
我们发现 setxxx 方法中的形参名字并不符合见名知意的规定, 那么如果修改与成员变量名一致, 是否就见名知意了呢?代码如下:
public class Student4 {
private String name;
private int age;
public void setName(String name) {
name = name;
}
public void setAge(int age) {
age = age;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
经过修改和测试, 我们发现了新的问题, 成员比那里赋值失败了. 也就是说, 在修改 setxxx() 的形参变量名后, 方法并没有给成员变量赋值. 这是由于形参变量与成员变量名重名, 导致成员变量名被隐藏, 方法中的变量名, 无法访问到成员变量, 从而赋值失败. 所以, 我们只能使用 this 关键字, 来解决这个重命名问题.
this 的含义
this 代表所在类的当前对象的引用 ( 地址值 ), 即对象字节的引用.
注: 方法被哪个对象调用, 方法中的 this 就代表那个对象. 即谁在调用, this 就代表谁.
this 使用
this.成员变量名;
- 1
使用 this 修饰方法中的变量, 解决成员变量被隐藏的问题. 代码如下:
public class Student5 {
private String name;
private int age;
public void setName(String name) {
// name = name;
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
// age = age;
this.age = age;
}
public int getAge() {
return age;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
注: 方法中只有一个变量名时, 默认也就是使用 this 修饰, 可以省略不写.
封装优化2 – 构造方法
当一个对象被创建的时候, 构造方法用来初始化该对象, 给对象的成员变量赋初始值.
无论你与否自定义构造方法, 所有的类都有构造方法. 因为 Java 提供了一个无参构造方法. 一旦我们自己定义了构造方法, Java 自动提供的默认无参数构造方法就会失效.
构造方法的定义格式
修饰符 构造方法名(参数列表){
// 方法体
}
- 1
- 2
- 3
构造方法的写法上, 方法名与它所在的类名相同. 它没有返回值, 所以不需要返回类型, 甚至不需要 void. 使用构造方法后, 代码如下:
public class Student6 {
private String name;
private int age;
// 无参数构造方法
public Student6() {
}
// 有参数构造方法
public Student6(String name,int age) {
this.name = name;
this.age = age;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
注意事项
- 如果你不提供构造方法, 系统就会给出无参数构造方法
- 如果你提供了构造方法, 系统将不再提供无参数据构造方法
- 构造方法是可以重载的, 既可以定义参数, 也可以不定义参数
标准代码 – JavaBean
JavaBean 是 Java 语言编写类的一种标准规范. 符合 JavaBean 的类, 要求类必须是具体和公共的, 并且具有无参数构造方法, 提供用来操作成员变量的 set 和 get 方法.
public class ClassName {
// 成员变量
// 构造方法
// 无参构造方法 (必须)
// 有参构造方法 (建议)
// 成员方法
// getxxx()
// setxxx()
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
编写符合 JavaBean 规范的类. 以学生类为例, 标准代码如下:
public class Student7 {
// 成员变量
private String name;
private int age;
// 构造方法
public Student7() {
}
public Student7(String name,int age) {
this.name = name;
this.age = age;
}
// 成员方法
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
测试类, 代码如下:
public class TestStudent {
public static void main(String[] args) {
// 无参构造使用
Student7 s= new Student7();
s.setName("柳岩");
s.setAge(18);
System.out.println(s.getName()+"‐‐‐"+s.getAge());
// 带参构造使用
Student7 s2= new Student7("赵丽颖",18);
System.out.println(s2.getName()+"‐‐‐"+s2.getAge());
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。
原文链接:iamarookie.blog.csdn.net/article/details/109996041
- 点赞
- 收藏
- 关注作者
评论(0)