参考视频:bilibili遇见狂神说
面向对象三大特性
1、封装
-
该露的露,该藏的藏。
-
我们程序设计要求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅暴露少量的方法給外部使用。
-
-
封装:数据的隐藏。
- 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息的隐藏。
//封装的作用
//对Student类中的属性进行封装
package 面向对象OOP.封装;
//学生类 private:属性私有。
public class Student {
//private封装
private String name;//名字
private String id;//学号
private char sex;//性别
}//当同包不同类中的Appliaction类调用Student类的属性时,效果如下👇👇👇
//点不出来被封装的属性,也就是说,被private修饰的属性,不发跨类调用。
//那么该如何在Application类中调用Student类的name属性和其他属性呢?
记住这句话就够了:属性私有,get/set。
package 面向对象OOP.封装;
public class Application {
public static void main(String[] args) {
Student student = new Student();//实例化一个student对象
//由于无法调用私有属性,所以调用Student类中的setName方法
student.setName("秦疆");//给setName传递一个参数进去。
//先看Studnet下文类,再看这条输出语句。
System.out.println(student.getName());
}
}
package 面向对象OOP.封装;
//学生类 private:属性私有。
public class Student {
//private封装
private String name;//名字
private String id;//学号
private char sex;//性别
//提供一些可以操作这个属性的方法!
//提供一些public的get和set方法
//get 获得这个数据
//这个写在下面会更直观一点,因为它是在serName方法之后执行的。
//这个方法利用this,将Student类中的属性name作为返回值,然后在再由Appliaction类调出name的结果。
public String getName(){
return this.name;
}
//set 给这个数据设置值
//Appliaction类中的初始化实例调用Student类中setName方法,进而将实例变量的值传递给setName的形参上。
//然后由this调用本类中的name,使得本类中的name的值由null变成了秦疆。
public void setName(String name){
this.name = name;
}
}
//自动生成get,set方法:Alt+insert
执行结果:
秦疆
- 封装的实际用途是什么呢?
//正常一个人的年龄应为0-150岁之间
//那么如果输入的年龄是999岁,那就会报错。
student.setAge(999);//不合法的
//这样,封装就起到了作用
public void setAge(int age){
if(age<150||age>0){
this.age = age;
}else{
System.out.println("您输入的年龄有误");
}
}
- 封装的意义
- 提高程序的安全性,保护数据。
- 隐藏代码的细节。
- 统一接口。
- 提高了系统的可维护性。