Java-面向对象-封装
概述
面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装类似于一个保护屏障,防止该代码和数据被其他类随意访问。要访问该类数据,必须通过指定的方式。适当的封装可以让代码更容易维护与理解,也加强了代码的安全性。
原则
将属性隐藏起来,若要访问某个属性,提供公共方法对其访问
权限修饰符
在定义成员变量时不仅会指定变量的类型,还会有修饰符部分。
//定义变量
[修饰符] 变量类型 变量名称;
[修饰符] 变量类型 变量名称=出始值
public int age;
private double weight;
作用:修饰变量、限定使用范围。
常见修饰符:public(公有的)、protected、private、final、static。
Public、protected、private、默认修饰符:权限修饰符,用来限定类的属性和方法的访问权限。注意
权限对应
修饰符 | 类本身 | 同一个包的类 | 不同包的子类 | 任何类 |
---|---|---|---|---|
private | ✅ | |||
默认修饰符 | ✅ | ✅ | ||
protected | ✅ | ✅ | ✅ | |
public | ✅ | ✅ | ✅ | ✅ |
private:私有权限,只能在类本身访问。
默认:可在类本身、和同包下的类中访问。
protected:受保护权限、除了在类本身和同包下的类中访问还可以在子类中访问。
public:公有权限、可以在任何类中访问
封装的使用
//一个类属性私有化行为公开化,还要添加构造方法
/*构造方法的作用:
* 是创建对象的时候初始化成员变量使用的
* 注意:
* 当你生成了有参构造,就一定要生成无参构造
* 但你生成了无参构造,不一定需要生成有参构造**/
package sample.lianxi.fangfa1;
public class Fengzhuang {
private String name;
private int age;
//private-访问修饰符只能在本类访问
//生成无参构造方法
public Fengzhuang() {//没有参数初始化变量向0看齐
super();
}
//生成有参构造方法
public Fengzhuang(String name, int age) {
this.name = name;
this.age = age;
}
//为每个属性提供一对getxxx()方法-取值和setxxx()方法-赋值*/
public String getName() {
return name;//用于设置name的属性
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//定义行为
public void tell(){
System.out.println("姓名:"+name+"\t年龄:"+age);
}
}
//在其他类调用name和age属性
class TestDemo{
public static void main(String[] args) {
//实例化对象
Fengzhuang fz=new Fengzhuang();
//调用方法
fz.tell();
//调用name和age属性
fz.setName("大聪明");
fz.setAge(23);
//调用方法
fz.tell();
}
}
get-xxx和set-xxx
get:代表取用:既然是取值就要有返回值,返回值类型与属性类型需一致
set:代表储存:既然是存值,就需要在参数列表中接收想要存入的值,类型与属性类型相同。