封装
-
什么是封装?
- 封装是一种将数据和方法加以包装,使之成为一个独立的实体,并且把它与外部对象隔离开的机制。具体来说,封装是将一个对象的所有“状态”属性) 以及 “行为”(方法)统一封装到一个类中,从而隐藏了对象内部的具体实现细节,向外面提供了有限的访问接口,时间对对象的保护和隔离。
-
封装的好处?
- 封装通过限制外部对对象内部的直接访问和修改,保证了数据的安全,并提高了代码的可维护和可复用性
-
在代码上如何实现封装?
- 属性私有化,对外提供
getter
和setter
方法
- 属性私有化,对外提供
User.java
package chapter3.oop07;
/*
为了保证user类型对象的age属性的安全,我们需要使用封装机制。
实现的步骤是什么?
1. 属性私有化(什么是私有化?使用private进行修饰)
属性私有化的作用是:禁止外部程序该属性进行随意的访问
所有被private修饰的,都是私有的,私有的只能在本类中访问
2. 对外提供setter和getter方法
为了保证外部的程序仍然可以访问age属性,因此要对外提供公开的访问入口
访问一般包括两种:
读方法的格式:getter
public int getAge(){}
改方法的格式:setter
public void setAge(int age){}
*/
public class User {
private int age;
//读取age属性的值
//getter方法是绝对安全的。因为这个方法是读取属性的值,不会涉及修改操作
public int getAge(){
//return this.age;
return age;
}
//修改age属性的值
//setter方法当中需要编写拦截过滤代码,来保证属性的安全
public void setAge(int num){
//this.age = num;
// age = num;
if(num < 0 || num > 100){
//快速生成if语句: (布尔类型).var
System.out.println("对不起,您的年龄值不合法");
return;
}
age = num;
}
}
UserTest.java
package chapter3.oop07;
public class UserTest {
public static void main(String[] args) {
// User user = new User();
// System.out.println(user.age);
// user.age = -100;
// System.out.println(user.age);
User u = new User();
//读
int age = u.getAge();
System.out.println("年龄:" + age);
System.out.println("年龄:" + u.getAge());
//改
u.setAge(-100);
//读
System.out.println("年龄 " + u.getAge());
}
}
java有就近原则
将代码 age = age; 改为 this.age = age; 输出50正确
this.大部分情况可以省略。
this.什么时候不能省略?用来区分局部变量和实例变量的时候
怎么快速生成get set方法? alt + insert
package chapter3.oop07;
public class VIP {
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
private String name;
private int age;
private String email;
private boolean gender;
private String address;
}
package chapter3.oop07;
import chapter3.oop02.Vip;
public class VIPTest {
public static void main(String[] args) {
//创建对象
VIP vip = new VIP();
//给属性赋值
vip.setName("momo");
vip.setAge(20);
vip.setEmail("momo@163.com");
vip.setAddress("北京");
vip.setGender(true);
//读取属性的值
System.out.println("姓名 " + vip.getName());
System.out.println("性别 " + (vip.isGender() ? "男" : "女"));
System.out.println("邮箱 " + vip.getEmail());
System.out.println("地址 " + vip.getAddress());
System.out.println("年龄 " + vip.getAge());
}
}