开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
访问修饰符
基本介绍
java提供四种访问控制符号,用于控制方法和属性(成员变量)的访问权限(范围)
- 公开级别:用public修饰,对同类,同包,子类,不同包公开
- 受保护级别:用protected修饰,对同类,同包,子类公开
- 默认级别:没有修饰符号,对同类,同包公开
- 私有级别:用private修饰,只有类本身可以访问,不对外公开
注意事项
- 修饰符可以用来修饰类中的属性,成员方法以及类
- 只有默认的和public才能修饰类!!!并且遵循上述访问权限的特点
- 关于子类中的访问权限,等后面学习继承再详解
- 成员方法的访问规则和属性完全一样
可以看到,在同一包中,我们可以访问public,protected和默认,但是访问不到n4,也就是使用private修饰的属性
有兴趣的同学也可以自行尝试以下其他的修饰符范围
封装
基本介绍
面向对象有三大特征:封装,继承和多态
封装(encapsulation):就是把抽象出的数据【属性】和对数据的操作【方法】封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作【方法】才能对数据进行操作
封装的理解和好处
- 隐藏实现细节
- 可以对数据进行验证,保证安全合理
- Person(name,age)
封装实现步骤
-
将属性进行私有化private【不能直接修改属性】
-
提供一个公共的(public)set方法,用于对属性判断并赋值
public void setXxx(类型 参数名){ //加入数据验证的业务逻辑 属性 = 参数名; } -
提供一个公共的(public)get方法,用于获取属性的值
public 数据类型 getXxx(){ //权限判断 return xx; }
快速入门
看一个案例
Encapsulation01.java
package com.gaogao.encap;
public class Encapsulation01 {
public static void main(String[] args) {
Person person = new Person();
person.setName("gaogao");
person.setAge(30);
person.setSalary(999999);
Person baibai = new Person("baibai", 15, 6000);
System.out.println(baibai.info());
System.out.println(person.info());
}
}
/*
不能随便查看人的年龄,工资等隐私,
并对设置的年龄进行合理的验证,年龄合理就设置,
否则就给默认,年龄必须在1-120之间,工资不能直接查看,
name的长度在2-6之间
*/
//自己写setXxx和getXxx太慢,我们使用快捷键alt + ins
//然后根据要求来完善代码
class Person{
public String name;
private int age;
private double salary;
//先创建一个无参构造器
public Person() {
}
//创建一个带有三个参数的构造器,调用一下试试
public Person(String name, int age, double salary) {
setName(name);
setAge(age);
setSalary(salary);
}
public String getName() {
return name;
}
public void setName(String name) {
if (name.length() >=2 && name.length() <= 6){
this.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("您的输入有误,给一个默认年龄0");
this.age = 0;
}
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String info(){
//用来返回属性信息
return "信息为 name = " + name + " age = " + age + " 薪水 = " + salary;
}
}
不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证,年龄合理就设置,否则就给默认,年龄必须在1-120之间,工资不能直接查看,name的长度在2-6之间
public class Person{
public String name;
private int age;
private double salary;
private String job;
//自己写setXxx和getXxx太慢,我们使用快捷键alt + ins
//然后根据要求来完善代码
}
封装与构造器
将构造器与setXxx结合
看一个代码
public Person(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
使用构造器就把原本的权限破坏掉了
解决方法:我们可以在构造器中使用set方法