今天跟大家分享一下Java中面向对象的三大特征。

首先,我们要知道Java中面向对象的三大特征都有什么。
面向对象三大特征:

  1. 封装
  2. 继承
  3. 多态

那么我们今天就来说一下什么是封装
封装是Java面向对象的核心思想,掌握封装对于学习Java面向对象的内容十分重要。
简单来说,封装就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其他部分只能通过被授权的操作[方法],才能对数据进行操作。

封装的理解和好处:

  1. 隐藏实现细节:方法(连接数据库) <–调用(传入参数…)
  2. 可以对数据进行验证,保证安全合理
    Person {name,age}
    Persion p = new Person();
    p.name = “潘潘”;
    p.age = 1200;

封装的实现步骤(三步):

  1. 将属性进行私有化private[不能直接修改属性,需要提供一个公共的方法]
public calss Test {
	public String name; // 公共的属性
	private int age; // 私有化的属性
	
}

这段代码中,将age属性进行私有化,也就是说age只能在本类中访问,不能在其他类中访问。

  1. 提供一个公共的(public)set方法,用于对属性判断并赋值
public void setAge(int age) { 
 		this.age = age;
}

使用this关键字的目的:
防止成员属性(private修饰的变量)和局部变量(setAge方法中的int age变量)之间发生同名冲突

  1. 提供一个公共的(public)get方法,用于获取属性的值
public int getAge() {
	return age;	// 将age返回
}

下面我们看一个案例:
不能随便查看人的年龄,工资等隐私,并对年龄进行合理的验证。年龄合理就设置,否则给默认年龄,必须在 1 - 120 之间,工资不能直接查看,名字的长度在 2 - 6字符之间。

public class Test {
	public static void main(String[] args) {
		Person person = new Person();
        person.setName("潘潘"); // 通过set方法给name赋值
        person.setAge(22);
        person.setSalary(30000);
        System.out.println(person.info()); // 调用info方法打印信息
        System.out.println(person.getSalary()); // 调用getSalary方法将薪水输出
        //如果我们自己使用构造器指定属性
        Person smith = new Person("smith", 80, 50000);
        System.out.println("====smith 的信息======");
        System.out.println(smith.info());
	}
}
// 创建一个Person类
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;
    }
    // 创建get/set方法
    public String getName() {	// 获取name的值
        return name;
    }

    public void setName(String name) {	
    //加入对数据的校验,相当于增加了业务逻辑
        if (name.length() >= 2 && name.length() <= 6) {
            this.name = name;	// 相当于给方法中的name赋值
        } else {
            System.out.println("名字的长度不对,需要(2-6)个字符,默认名字");
            this.name = "无名人";
        }
    }

    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;
    }
}

运行结果:

java对象重新封装为新的json_封装