Java面向对象(封装、getter/setter、构造器、this关键字)
1 封装
1.1 什么是封装
封装举个例就像在小卖铺买的零食一样,零食都有包装,将零食与外界隔离开来,避免零食污染不可食用,这就是封装的思想。
1.2 封装一问
在文章 Java面向对象(方法、方法重载,方法可变参数) 说到的 “值类型(基本)和引用类型(类,数组)作为方法参数的区别” 中 “引用类型(类,数组)会保留修改”。
封装就是避免引用类型随意给属性赋值,这样会造成数据安全问题以致数据不正确。
1.3 解决方法
1、将属性进行私有化(private);
2、定义公共方法处理逻辑并且给属性赋值。
1.4 如何封装
1、属性私有化(private);
2、提供给外部一个公共给属性赋值的方法:getter 和 setter 方法。
1.5 代码释义:StudentTest.java
/**
* @author zc
* @date 2021/10/22 10:19
* java 封装测试类:StudentTest
* main(String[] args):主程序运行入口
*/
public class StudentTest {
public static void main(String[] args) {
// 创建学生类 Student 实例化对象 student
Student student = new Student();
// 通过封装的 setter 方法给学生 student 属性 name 赋值
student.setName("张三");
// 通过封装的 setter 方法给学生 student 属性 age 赋值
student.setAge(-10);
// 通过封装的 getter 方法打印学生 student 属性 name age 信息
System.out.println("name=" + student.getName()+",age="+student.getAge());
// 学生 student 调用学生类 Student 方法 show() 打印自己的信息
// 此处没有给学生 student 属性 sex 赋值,sex 为 null
student.show();
}
}
/**
* 学生类 Student
* name:属性,学生姓名
* age:属性,学生年龄
* sex:属性,学生性别
* 属性 getter,setter 方法
* show():方法,打印学生信息
*/
class Student{
/**
* 学生姓名
*/
private String name;
/**
* 学生年龄
*/
private int age;
/**
* 学生性别
*/
private String sex;
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setAge(int a) {
if(a>0&&a<120) {
age = a;
}else {
age = 18;
System.out.println("年龄无效,默认年龄 18");
}
}
public int getAge() {