Java对象的三大特征之一:封装详解 基于Idea软件

  • 该露的漏,该藏的藏

    • 我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。(例如电视与遥控器)

  • 封装(数据的隐藏)

    • 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏

  • 记住这句话就够了:属性私有,get/set

    两个类一个为含有main方法的Application主类主要用于调用其它方法类以及完成main()方法

      package com.oop;
      import com.oop.Demo04.Student;
      /*
      封装的意义
      1.提高程序的安全性,保护数据(由于private只能通过set/get方法来改变但set又可以增加安全性判断)
      2.隐藏代码的实现细节(用户只需要调用方法不用知道如何实现)
      3.统一接口(get/set)形成了规范
      4.系统的可维护性增加了
       */
      public class Application {
          public static void main(String[] args) {
              Student s1 = new Student();
              //s1.name;此时此属性已经私有无法被调用使用但可以通过get方法使用
              String name =s1.getName();
              s1.setName("秦疆");
              //判断一个类的两个方法是否相同:只要方法名与参数列表一致两个方法即为同一个方法
              System.out.println(s1.getName());
              s1.setAge(-1);//此时数据是不合法的(人年龄不可能999)
              System.out.println(s1.getAge());
          }
      }

    另一个类是与另一包内定义的Student类。

      package com.oop.Demo04;
      //学生类  private:私有
      //封装就是通过private令外部不可以直接访问,通过内部方法set/get(为一般命名方式也可以不用此方法)访问调了一个接口
      public class Student {
          //属性私有
          private String name;//名字
          private int id;//学号
          private char sex;//性别
          private int age;//年龄
          //方法与封装基本无用!  学习()方法  睡觉()
          //可以提供一些可以操作这些属性的方法
          //提供一些public的 get/set方法
          //get  获得这个数据或属性
          public String getName(){
              return this.name;
          }
          //set  给这个数据设置值
          public void setName(String name){
              this.name=name;
          }
          //快捷键:Alt+insert自动生成get/set方法
      ​
          public int getId() {
              return id;
          }
      ​
          public void setId(int id) {
              this.id = id;
          }
      ​
          public char getSex() {
              return sex;
          }
      ​
          public void setSex(char sex) {
              this.sex = sex;
          }
      ​
          public int getAge() {
              return age;
          }
      ​
          public void setAge(int age) {//封装作用:避免不合法数据破坏系统
              if(age>120||age<0){//不合法的
                  this.age=3;
              }else{
                  this.age=age;
              }
          }
          //注意get方法实际上就是返回类中属性的值
          //set方法则是通过从外边传参来改变对象的属性
          //依次来理解get/set的命名格式
      }

    首先对于这两个类并不在同一个包内故而就算不加private修饰符也不能在new对象后直接调用也必须通过特定的方法(可以是set/get方法)来实现调用。

    对于修饰符private:令外部命令不可以直接进行访问对于由private修饰的属性。

    对于封装的实质:就是通过private令外部不可以直接访问相关属性,通过内部方法set/get(为一般命名方式也可以不用此方法)访问调了一个接口。来实现对于相关属性的调用。

    对于get/set方法:定义规范(可以遵守也可以不遵守,但是Idea有相关快捷方式打出get或set就是显示)驼峰命名规则get/set加上首字母大写的相关属性名。对于其格式的理解:get为得到相关的属性值因此定义该方法为public 返回值类型 get属性名(){方法体;}方法体为return语句,一般为return this.属性名以此来得到相关的属性的返回属性值,而在主方法调用中一般用来打印与赋值。而对于set为:对于相关属性值的修改不需要返回值,因此一般为public void set首字母大写的属性名(变量类型 变量名){方法体;}因为set的目的是对属性值修改故而必须要有参数传值才可以所以set方法一般都有参数,而对于方法体一般为this.属性名=变量名;来实现将输入的变量值直接赋值给对象的属性值。其次set/get方法一般都是public格式以便于main()函数new后直接调用。

    对于set方法由于存在对于属性值的改动故而也可以通过if语句来实现保证数据不会破坏系统结构的功能!(如上方年龄为999是一定是不合理的会破坏系统的结构)

    set/get方法生成的快捷键:Alt+Insert后选择getter and setter键位并选择要生成的属性也可以多选(实现的是同时建立多个属性的set和get方法)。

    封装的意义:

    1.提高程序的安全性,保护数据(由于private只能通过set/get方法来改变但set又可以增加安全性判断)2.隐藏代码的实现细节(用户只需要调用方法不用知道如何实现)3.统一接口(get/set)形成了规范4.系统的可维护性增加了

    判断一个类的两个方法是否相同:只要方法名与参数列表一致两个方法即为同一个方法,此时涉及到了方法的重载,例如使用Alt+左击查看println函数可以看出源程序代码中有多个名字为println的函数但是其参数列表不同(有的类型不同,有的个数不同)这就是方法的重载当实参数不一致时调用的重载方法也不一致。

    本节关键:属性私有,get/set

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光的样子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值