面向对象的三大特征:
- 封装
- 继承
- 多态
封装
public class Demo1 {
public static void main(String[]args){
Person lxl = new Person();
// id成员变量中加了一个private后,这个成员变量不能直接使用了。
// lxl.id = 321;
lxl.name = "逗比";
// 这里出现了一个问题,不符合生活逻辑,【解决方法看下面】
lxl.age = -16;
lxl.gender = '男';
// 通过函数进行修改,获取成员变量,有一个好处就是:【可以对传入的值进行判断】
lxl.setId(10);
System.out.println("Name: " + lxl.name + " Age: " + lxl.age +
" Gender: " + lxl.gender + " id: " + lxl.getId());
}
}
/*
* 问题:
* 代码不会判断你传入的参数是否与生活实际有冲突
* 有一些代码符合代码逻辑,但是不符合生活逻辑
*
* 思考:
* 在对成员变量进行复制的时候,基于语法规范的情况下,要对数据进行
* 一定的约束和判断,让它符合生活逻辑
*
* 【封装思想】
* 权限修饰符:
* public:公开的,公用的。使用public修饰的成员变量或者说成员方法任何人
* 都可以通过对象直接使用
*
* private:私有的。如果使用private修饰的成员变量或者说成员方法只能在【类内】
* 使用,类外谁都不能用
*
* 【问题】
* 用private修饰的成员变量和成员方法,类外都不能使用,那怎么给成员变量进行赋值操作?
* 【解决方法 setter 和 getter方法】
* setter方法是提供给【类外】用来设置【私有化成员变量的方法】
* getter方法是提供给【类外】用来获取【私有化成员变量的数据】
* 【面对传入的成员变量不符合生活逻辑的问题】
* 可以在setter方法中对传入的值进行判断
* 【封装的好处】
* 1. 提高代码的安全性
* 2. 操作数据简单
* 3. 可以隐藏一部分代码 JAR
* */
class Person{
// 成员变量
String name;
private int id;
int age;
char gender; // 性别
// 成员方法
public void winner(){
System.out.println("Winner winner chicken dinner");
}
/*
* 完成私有化成员变量的setter 和 getter方法
* setter(getter)方法的要求:
* set(get)成员变量名(所需参数)
* 成员变量名首字母大写
* */
public void setId(int n){
id = n;
}
public int getId(){
return id;
}
}