Java面向对象之封装及相关知识合集
- 一、封装(Encapsulation)
- 1.封装的相关概念
- 2.封装的优点
- 3.封装实现步骤
- 二、private关键字
- 1.private的作用
- 2.private使用实例
- 三、this关键字
- 1.this的适用范围
- 2.this关键字的使用
- 四、构造方法
- 五、定义一个标准类(Java Bean)
- 1.标准类的组成
- 2.标准类示例
一、封装(Encapsulation)
1.封装的相关概念
- 在面向对象程式设计方法中,封装是指一种
将抽象性函式接口的实现细节部分包装、隐藏起来的方法
。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问
。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装
可以让程式码更容易理解与维护
,也加强了
程式码的安全性
。1
2.封装的优点
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
3.封装实现步骤
1.修改属性的访问权限为private
public class Person {
private String name;
private int age;
}
2.当属性设置为private(私有)
后,属性只能在本类中访问
,其它类访问不了,因而实现了对信息的隐藏。如果要使其它类继续访问
必须为私有属性添加setter和getter方法
。
public class Person{
private String name;
private int age;
public void setAge(int age){
this.age = age;
//this.属性 指的是成员变量
//this关键字可以解决成员变量和局部变量重名冲突问题
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
3.有了Person类,新建一个测试类PersonTest类,解释说明一下Person类中被private修饰的成员变量,是如何通过其它类进行访问的。
public class PersonTest {
public static void main(String[] args) {
//创建对象Person类的对象
Person p = new Person();
//使用对象名.setter方法对成员变量赋值
p.setName("李四");
p.setAge(18);
//使用对象名.getter方法取出成员变量的值
System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
}
}
程序运行结果如下:
姓名:李四,年龄:18
【tips】
方法也是一种封装。
二、private关键字
1.private的作用
- 是一个权限修饰符,用于修饰成员变量和成员方法。
- 私有是针对类,而不是针对对象。
- 被私有化的成员只在本类中有效。
2.private使用实例
public class Person {
// String name;
// int age;
private String name;
private int age;
}
被private修饰后在本类中可以直接使用成员变量,在其它类中使用必须使用setter和getter方法
public static void main(String[] args) {
System.out.println("姓名:"+name+'\n'+"年龄:"+age);
}
setter方法
必须有参数
,且类型与成员变量一致getter方法
必须有返回值
,且返回值类型与成员变量一致
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;
}
【tips】
可以在setter和getter方法中对数据的合理性进行定义
例如在setAge()中对年龄数值的合理性进行定义
public void setAge(int age) {
if (age >= 0 && age <120) {
this.age = age;
}else{
System.out.println("数据不合理!");
}
}
在其它类中使用Person类中被private修饰的变量
public class PersonTest {
public static void main(String[] args) {
//创建对象Person类的对象
Person p = new Person();
//使用对象名.setter方法对成员变量赋值
p.setName("李四");
p.setAge(20);
//使用对象名.getter方法取出成员变量的值
System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
}
}
程序运行结果如下:
姓名:李四,年龄:20
三、this关键字
1.this的适用范围
1.this关键字
指向
的是当前对象的引用
2.this关键字的使用一定在方法内部
3.this不能用于静态方法
2.this关键字的使用
变量
当方法的局部变量和成员变量同名时,会优先使用局部变量(就近原则)
使用this.属性,就代表使用成员变量
public class Person {
private String name;
public void setName(String name){
this.name = name;
}
}
方法
(1) this.方法名称
访问本类的成员方法(2) this()
访问本类的构造方法
注意事项:
- 1.()中可以有参数的 如果有参数 就是调用指定的有参构造
- 2.this()只能写在构造方法中
- 3.必须是构造方法中的第一条语句
四、构造方法
构造方法是专门用来创建对象的方法,当通过关键字
new来创建对象时
,就是调用构造方法
。
构造方法定义格式:
public 类名称([参数类型 参数名称,参数类型 参数名称,...]){
//参数可有可无
//参数个数和类型可以根据需要定义
方法体;
}
名称必须和所在的类名称完全一样。
没有返回值类型。
编译器默认存在一个无参构造方法。
一旦编写了至少一个构造方法,默认无参构造方法消失。
五、定义一个标准类(Java Bean)
1.标准类的组成
-
所有成员变量
都要使用private关键字修饰
每一个成员变量都需要有setter和getter方法
- 编写
一个无参构造方法
- 编写
一个全参构造方法
2.标准类示例
import java.util.Date;
public class Person {
private String name;
private String sex;
private Date birthday;
private int age;
//无参构造方法
public Person() {
}
//全参构造方法
public Person(String name, String sex, Date birthday, int age) {
this.name = name;
this.sex = sex;
this.birthday = birthday;
this.age = age;
}
//setter和getter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//setter和getter方法
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
//setter和getter方法
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
//setter和getter方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- 菜鸟教程 — Java封装 ↩︎