面向对象——封装
【摘要】 一、访问修饰符(1)基本介绍 java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围)。1)公开级别:用public修饰,对外公开。2)受保护级别:用protected修饰,对子类和同一个包中的类公开。3)默认级别:没有修饰符号,对同一个包中的类公开。4)私有级别:用private修饰,只有类本身可以访问,不对外公开。(2)四种访问修饰符的访问范围访...
一、访问修饰符
(1)基本介绍
java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围)。
1)公开级别:用public修饰,对外公开。
2)受保护级别:用protected修饰,对子类和同一个包中的类公开。
3)默认级别:没有修饰符号,对同一个包中的类公开。
4)私有级别:用private修饰,只有类本身可以访问,不对外公开。
(2)四种访问修饰符的访问范围
访问修饰符 | 同类 | 同包 | 子类 | 不同包 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
默认 | √ | √ | × | × |
private | √ | × | × | × |
(3)注意事项
1)修饰符可以用来修饰类中的属性,成员方法以及类
2)只有默认修饰符和public修饰符才可以修饰类,并且遵循上述访问权限的特点
3)成员方法的访问规则和属性完全一致
二、封装
(1)介绍
封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。
(2)实现步骤
1)将属性进行私有化private,也就是不可以直接修改属性
2)提供一个公共的(public)set方法,用于对属性判断并且赋值
public void setXXX(类型 参数名) {//XXX表示某个属性
//加入数据验证的业务逻辑
属性 = 参数名
}
3)提供一个公有的(public)get方法,用于获取属性的值
public 数据类型 getXXX() {//权限判断,XXX表示某个属性
return xx;
}
(3)入门案例
编写一个程序,要求如下:
不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。
年龄合理就设置,否则给默认年龄,必须在 1 - 100 之间,
name 的长度在2 - 6字符之间,否则给默认值
年龄、工资不能直接查看
package com.hspedu.encap;
// encapsulation 封装
// set方法用于对属性判断并赋值
// get方法用于获取属性的值
public class Encapsulation01 {
public static void main(String[] args) {
Person person = new Person();
person.setName("zwy");
person.setAge(18);
person.setSalary(30000);
System.out.println("=====zwy的基本信息=====");
System.out.println(person.Info());
// 构造器的指定属性
Person ttkx = new Person("ttkx", 110, 50000);
System.out.println("=====ttkx的基本信息=====");
System.out.println(ttkx.Info());
}
}
// 不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。
// 年龄合理就设置,否则给默认年龄,必须在 1 - 100 之间,
// name 的长度在2 - 6字符之间,否则给默认值
// 年龄、工资不能直接查看
class Person {
public String name; // 名字公开
private int age; // 年龄 私有化
private double salary; // 工资私有化
// 无参构造器
public Person() {
}
// 有三个属性的构造器
public Person(String name, int age, double salary) {
// this.name = name;
// this.age = age;
// this.salary = salary;
// 调方法
setName(name); // 因为setName指的就是本类的,所以等价于this.srtName
setAge(age);
setSalary(salary);
}
//快捷键Alt + Insert 调用
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 = "ttkx";
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age >= 1 && age <= 100) {
this.age = age;
} else {
System.out.println("年龄必须在 1 - 100 之间");
this.age = 18; // 赋默认值
}
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String Info() {
return "name = " + name + " age=" + age + " salary=" + salary;
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)