12. Java类中的封装
1、Java类中的封装
学习了访问权限修饰符后,应该可以理解封装性的概念和含义。封装性是面向对象三大特征之一 封装性是一种信息隐藏技术
2、封装的概念
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
3、两个含义:
-对象的全部属性和全部方法结合在一起,形成一个不可分割的独立单位 -尽可能隐藏对象的内部结构
4、具体表现:
-属性使用private权限 -方法使用public权限
5、封装的优点
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息,实现细节。
6、封装的步骤
-
修改属性的可见性来限制对属性的访问(一般限制为private)
-
对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问
-
重写从父类Object继承下来的toString()方法,来输出自己想要的信息。
-
重写从父类Object继承的hashCode()方法,计算hashCode值,hashCode值主要用来判断对象的属性是否相同,进行数组的排序。
-
重写从父类Object继承的equals()方法,判断两个对象属性值是否完全相同。
示例:
package com.company.practice.demo;
public class User {
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;
}
}
完整代码:
package com.company.practice.demo;
public class User {
private String name;
private int age;
public User() {
}
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;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}