封装
介绍
封装 (encap sulation) 就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其他部分只有通过授权的操作[方法],才能对数据进行操作(如何正确设计对象的属性和方法)
对象代表什么,就得封装对应的数据,并提供数据对应的行为
好处
1.隐藏实现细节:方法(连接数据库)<--调用(传入参数..)
2.可以对数据进行验证,保证安全合理
实现步骤
(1)将属性进行私有化private【不能直接修改属性】
(2)提供一个公共的(public)set方法,用于对属性判断并赋值
public void setXxx(类型 参数名){
//Xxx表示某个属性
//加入数据验证的业务逻辑
属性 = 参数名
}
(3)提供一个公共的(public)get方法,用于获取属性(成员变量)的值
public 数据类型 getXxx(){
//权限判断,Xxx某个属性
return xx;
}
入门例子
get set快捷件 : alt+insert 选get set
package encap;
public class Encapsulation01 {
public static void main(String[] args) {
Person person = new Person();
person.setName("Eric");
person.setAge(33);
person.setSalary(10000);
System.out.println(person.info());
}}
class Person{
public String name;
public int age;
private double salary;
public String getName() {
return name;
}
public void setName(String name) {
if(name.length() >=2 && name.length() <= 6){
this.name = name;}else {
System.out.println("名字长度不对,需要(2-6)个字符,默认名字");
this.name = null;
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
//判断
if(age >= 1 && age <= 120 ){
this.age = age;
}else {
System.out.println("年龄需要在 1 - 120 ,给我默认年龄18");
this.age = 18;//默认年龄
}
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String info(){
return "Name: " + name + " Age: " + age + " Salary: " + salary;
}
}
输出结果:
封装与构造器
package encap;
public class Encapsulation01 {
public static void main(String[] args) {
Person person = new Person();
person.setName("Eric");
person.setAge(33);
person.setSalary(10000);
System.out.println(person.info());
//使用构造器指定属性
Person Eric2 = new Person("Eric2",20,22222);
System.out.println(Eric2.info());
}}
class Person{
public String name;
public int age;
private double salary;
//构造器
public Person() {
}
//有三个属性的构造器
public Person(String name, int age, double salary) {
// this.name = name;
// this.age = age;
// this.salary = salary;
setName(name);
setAge(age);
setSalary(salary);
}
public String getName() {
return name;
}
public void setName(String name) {
if(name.length() >=2 && name.length() <= 6){
this.name = name;}else {
System.out.println("名字长度不对,需要(2-6)个字符,默认名字");
this.name = null;
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
//判断
if(age >= 1 && age <= 120 ){
this.age = age;
}else {
System.out.println("年龄需要在 1 - 120 ,给我默认年龄18");
this.age = 18;//默认年龄
}
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String info(){
return "Name: " + name + " Age: " + age + " Salary: " + salary;
}
}
输出结果: