封装
简单来说就是保护对象的数据,若想改变,只能通过被授权的方法来进行操作
分为三步:1.属性私有化
2.提供一个公共的set方法对属性判断并赋值
3.提供一个公共的get方法用于获取属性的值
package com.practice;
public class encap {
public static void main(String[] args) {
Person p1 = new Person();
p1.setName("jack");
System.out.println(p1.info());
}
}
// Person类
class Person{
private int age;
public String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public int getAge() {
return age;
}
//可以将对数据的验证写在set方法里
public void setAge(int age) {
if(age>=0 && age<=100){
this.age = age;}
else{
System.out.println("输入信息有误");
this.age = 18;
}
}
public String info(){
return name + age ;
}
}
访问修饰符
分为public,protected,默认,private
构造器与封装
直接使用会出现问题,如下代码
package com.practice;
public class encap {
public static void main(String[] args) {
Person p1 = new Person(1000,"java");
System.out.println(p1.info());
}
}
// Person类
class Person{
private int age;
public String name;
//无参构造器
public Person() {
}
//关注点
//有参构造器
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public int getAge() {
return age;
}
//可以将对数据的验证写在set方法里
public void setAge(int age) {
if(age>=0 && age<=100){
this.age = age;}
else{
System.out.println("输入信息有误");
this.age = 18;
}
}
public String info(){
return name + age ;
}
}
输出结果
set方法中对年龄的限制,因为构造器的缘故并没有生效
所以需要对代码进行改进,构造器中也调用set方法
package com.practice;
public class encap {
public static void main(String[] args) {
Person p1 = new Person(1000,"java");
System.out.println(p1.info());
}
}
// Person类
class Person{
private int age;
public String name;
//无参构造器
public Person() {
}
//关注点
//有参构造器
public Person(int age, String name) {
setName(name);
setAge(age);
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public int getAge() {
return age;
}
//可以将对数据的验证写在set方法里
public void setAge(int age) {
if(age>=0 && age<=100){
this.age = age;}
else{
System.out.println("输入信息有误");
this.age = 18;
}
}
public String info(){
return name + age ;
}
}
输出结果