Java封装基本使用

封装基本使用

  • 基本介绍

    • 面向对象编程有三大特征:封装、继承和多态。
  • 封装介绍

    • 把抽象出的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作[方法],才能对数据进行操作.
  • 封装的理解和好处

    1. 隐藏实现细节:方法(连接数据库) <-- 调用(传入参数…)
    2. 可以对数据进行验证,保证安全合理
      Person{name,age}
      Person p=new Person();
      p.name = "liwenhui";
      p.age = 1200;
      
  • 封装的实现步骤 (三步)

    1. 将属性进行私有化private [不能直接修改属性并赋值]
    2. 提供一个共有的(public)set方法,用于对属性判断并赋值
      public void setXxx(类型 参数名){
      //Xxx表示某个属性
      //加入数据验证的业务逻辑
        属性 = 参数名;
      }
      
    3. 提供一个共有的(public)set方法,用于获取属性的值
      public 数据类型
      getXxx(){
      //权限判断 ,Xxx某个属性
        return xx;
      }
      
  • 快速入门案例

    • 在Java中如何实现这种类似的控制呢?
      看一个小程序,不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证,年龄合理就设置,否则给默认年龄,必须在1-120,年龄,工资不能直接查看,name的长度在2-6个字符之间
      package p;
      public class Encapsulation01 {
          public static void main(String[] args) {
              Person person = new Person();
              person.setName("兮动人");
              person.setAge(1000);
              person.setSalary(30000);
              System.out.println(person.info());
              System.out.println(person.getSalary());
          }
      }
      
      class Person {
          public  String name; //名字公开
          private int age; //age 私有化
          private double 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("你设置年龄不对,需要在 (1-120), 给默认年龄18 ");
                  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;
          }
      }
      
  • 将构造器和 setXxx 结合

    • 在使用构造方法时,也同样可以验证,把 set 方法写到构造器中,在上面的基础上增加如下
      		//如果我们自己使用构造器指定属性
              Person person1 = new Person("云兮动人", 200, 10000);
              System.out.println("====兮动人的信息====");
              System.out.println(person1.info());
      
      	//有三个属性的构造器
          public Person(String name, int age, double salary) {
             /* this.name = name;
              this.age = age;
              this.salary = salary;*/
              //可以将 set 方法写在构造器当中,这样仍然可以验证
              setName(name);
              setAge(age);
              setSalary(salary);
          }
      
  • 练习

    创建程序,在其中定义两个类: Account和AccountTest类体会Java的封装性.
    1. Account类要求具有属性: 姓名(长度为2位3位或四位),余额(必须>20),密码(必须是六位),如果不满足,则给出提示信息,并给默认值(程序员自己定)
    2. 通过setXxx的方法给Account的属性赋值
    3. 在AccountTest中测试
    4. 提示知识点:
      String name = "";
      int len = name.length();字符串的长度
      
      public class Account {
          //为了封装,将3个属性设置为private
          private String name;
          private double balance;
          private String pwd;
      
          //提供两个构造器
          public Account() {
          }
      
          public Account(String name, double balance, String pwd) {
              this.setName(name);
              this.setBalance(balance);
              this.setPwd(pwd);
          }
      
          public String getName() {
              return name;
          }
      
          //姓名(长度为2位3位或4位)
          public void setName(String name) {
              if (name.length() >= 2 && name.length() <= 4) {
                  this.name = name;
              } else {
                  System.out.println("姓名要求(长度为2位3位或4位),默认值 无名");
                  this.name = "无名";
              }
          }
      
          public double getBalance() {
              return balance;
          }
      
          //余额(必须>20)
          public void setBalance(double balance) {
              if (balance > 20) {
                  this.balance = balance;
              } else {
                  System.out.println("余额(必须>20) 默认为0");
              }
          }
      
          public String getPwd() {
              return pwd;
          }
      
          //密码(必须是六位)
          public void setPwd(String pwd) {
              if (pwd.length() == 6) {
                  this.pwd = pwd;
              } else {
                  System.out.println("密码(必须是六位)默认密码为 000000");
                  this.pwd = "000000";
              }
          }
          //显示账号信息
          public void showInfo() {
              //可以增加权限的校验
              System.out.println("账号信息 name=" + name + " 余额=" + balance + " 密码" + pwd);
      //        if() {
      //            System.out.println("账号信息 name=" + name + " 余额=" + balance + " 密码");
      //        }else{
      //            System.out.println("你无权查看...");
      //        }
          }
      }
      
      
      public class TestAccount {
          public static void main(String[] args) {
              //创建Account
              Account account = new Account();
              account.setName("jack");
              account.setBalance(60);
              account.setPwd("123456");
      
              account.showInfo();
          }
      }
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值