面向对象——封装
面向对象共有三个特征: 封装、继承、多态
封装表现
方法就是最基本的封装体
类也是一个封装体
封装的好处
1、提高代码的复用性
2、隐藏实现细节,还要对外提供可以访问的方式,便于调用者的使用。
3、提高安全性,
举例
机箱:
一台电脑,它是由CPU、主板、显卡、内存、硬盘、电源等部件组长,其实我们将这些部件组装在一起就可以使用电脑了,但是发现这些部件都散落在外面,很容造成不安全因素,于是,使用机箱壳子,把这些部件都装在里面,并在机箱壳上留下一些插口等,若不留插口,大家想想会是什么情况。
总结
机箱其实就是隐藏了办卡设备的细节,对外提供了插口以及开关等访问内部细节的方式。
私有private
把属性私有化,但因为私有化所有无法赋值,所有就有了赋值(设置set),取值(获取 get),
因此对私有的变量访问的方式可以提供对应的set/get方法。
对象的内存解释
class Person {
private int age;
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
}
public class PersonDemo {
public static void main(String[] args) {
Person p = new Person();
p.setAge(30);
System.out.println("大家好,今年我" + p.getAge() + "岁");
}
}
程序执行流程说明
1、 先执行main方法(压栈),执行其中的 Person p = new Person();
2、 在堆内存中开辟空间,并为其分配内存地址0x1234,紧接着成员变量默认初始化(age = 0);将内存地址0x1234赋值给栈内中的Person p 变量
3、 继续执行p.setAge(30)语句,这时会调用setAge(int age)方法,将30赋值为setAge方法中的“age”变量;执行this.age = age语句,将age变量值30 赋值给成员变量this.age为30;
4、 setAge()方法执行完毕后(弹栈),回到main()方法,执行输出语句System.out.println(),控制台打印p对象中的age年龄值。
注意
this到底代表什么呢?this代表的是对象
具体代表哪个对象呢?哪个对象调用了this所在的方法,this就代表哪个对象。
上述代码中的 p.setAge(30)语句中,setAge(int age)方法中的this代表的就是p对象。