Java初学6.2-封装
面向对象的三大特征:封装,继承和多态。
封装:把抽象出来的数据(属性)和对数据的操作(方法)封装在一起,数据将被保护在内部。程序的其他部分只有通过被授权的操作(方法)才能对数据进行操作。
封装的好处:隐藏数据的实现细节,并且可以对数据进行验证,保证数据的安全合理。
封装的步骤:
- 将属性进行私有化-private。
- 提供一个公共的set方法,用于对属性进行判断与赋值。
- 提供一个公共的get方法,用来获取属性的值。
package EncapTest;
public class Encap {
public static void main(String[] args) {
Person p = new Person();//若没有set,get方法,将无法访问属性。
p.name="大帅哥";
p.setAge(80);
p.setSalary(12000);
System.out.println(p.name);
System.out.println(p.getAge());
System.out.println(p.getSalary());
/* Person p2 = new Person("超级大帅哥",120,18000);
System.out.println(p2.name);
System.out.println(p2.getAge());//此时的输出不受if(age>=1&&age<=100)限制
System.out.println(p2.getSalary());
*/
}
}
class Person {
public String name;
private int age;
private double salary;
/*
public Person() {
}
public Person(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
//如果我们希望输出受到限制只需要在构造方法中加上set方法
setSalary(salary);
setAge(age);
}
*/
public void setAge(int age) {
if(age>=1&&age<=100) {//业务逻辑在set方法中进行控制。
this.age = age;//this谁调用指向谁。
}else{
System.out.println("(ノ`Д)ノ");
this.age = 0;
}
}
public int getAge() {
return age;
}
public void setSalary(double salary) {
this.salary = salary;
}
public double getSalary() {
return salary;
}
}
当出现构造器时,直接的输出并不受到set方法中的判断条件的限制,要想使输出受到限制,必须在构造器中调用set方法。
小练习:
package EncapTest;
public class AccountTest {
public static void main(String[] args) {
Account a = new Account();
a.setName("与姜昆");
a.setBalance(18000);
a.setPassword(123456);
System.out.println(a.getName());
System.out.println(a.getBalance());
System.out.println(a.getPassword());
}
}
class Account{
private String name;
private int balance;
private int password;
public String getName() {
return name;
}
public void setName(String name) {
if(name.length()>=2&&name.length()<=4){
this.name = name;
}else{
System.out.println("!!!");
this.name = "***";
}
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
if(balance>20) {
this.balance = balance;
}else {
System.out.println("!!!");
this.balance = 0;
}
}
public int getPassword() {
return password;
}
public void setPassword(int password) {
if(password>=100000&&password<=999999) {
this.password = password;
}else{
System.out.println("!!!");
this.password = 0;
}
}
}