面向对象编程三大特征

面向对象编程三大特征

封装 继承 和 多态

面向对象编程-封装

封装介绍

封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作[即方法] ,才能对数据进行操作

举例 : 就好比我们日常使用的电视机 ,电视机的遥控器有很多按钮 ,有的按钮控制开关 ,有的控制音量 ,这其实就是一种封装 ,因为开机关机的执行过程十分复杂 ,但是我们只需要一个按键就可以实现 ,这就是封装

封装的理解和好处

  1. 隐藏实现细节 方法 < -- 调用

例如连接数据库 ,具体实现我们不管 ,我们只需要考虑如何传入数据

  1. 可以对数据进行验证,保证安全合理

Person{name,age}

Person p = new Person();
p.name = "jack";
p.age = 1200;
//实际上没有人能够活到1200岁,但是这样做程序也会允许
//因为这个过程中我们没有对数据进行验证合理性
//因此接下来就可以使用封装来实现对数据进行验证

 

封装的实现步骤

  1. 将属性进行私有化private 【不能直接修改属性】

  1. 提供一个公共(public)的set方法,用于对属性判断并赋值

public void setXxx(类型 参数名){//这里的Xxx表示某个属性
//加入数据验证的业务逻辑
属性 = 参数名;
}

 

  1. 提供一个公共(public)的get方法,用于获取属性的值

public 数据类型 getXxx(){ //权限判断,调用者是否有权限返回
return XX;
}

 

● 快速入门案例

看一个案例

那么在java中如何实现这种类似的控制呢?

  • 请大家看一个小程序(Encapsulation01.java), 不能随便查看人的年龄, 工资等隐私 ,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认的值

  • 年龄必须在1-120 , 工资不能直接查看 , name的长度在 2-6 字符 之间

 

package com.edu.encap;

import com.sun.xml.internal.ws.api.ha.StickyFeature;

import java.util.Scanner;

public class Encapsulation01 {
  public static void main(String[] args) {
      //如果要使用快捷键alt + r需要先配置主类
      //先用右键run一次,之后就可以使用快捷键了
      Person person = new Person();
      person.setName("jackxxxxxxxx");
      person.setAge(130);
      person.setSalary(30000);
      System.out.println(person.info());
      System.out.println(person.getSalary());
  }
}
//- 请大家看一个小程序(Encapsulation01.java), 不能随便查看人的年龄, 工资等隐私 ,
// 并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认的值
//- 年龄必须在1-120 , 工资不能直接查看 , name的长度在 2-6 字符 之间

class Person{
  public String name;//名字公开
  private int age;//年龄私有
  private double salary;//工资私有
  //手写set 和 get太慢了 ,可以使用快捷键来解决
  //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 = "noname";

      }

  }

  public int getAge() {

      return age;
  }

  public double getSalary() {
      Scanner sc = new Scanner(System.in);
      System.out.println("查看工资需要输入密码:");
      String input = sc.nextLine();
      if (input.equals("111") ){
          return salary;
      }else {
          return -1;
      }

  }

  public void setSalary(double salary) {
      this.salary = salary;
  }

  public void setAge(int age) {
      //判断
      if (age>=1&&age <=120){
          this.age = age;
      }else {
          System.out.println("你设置的年龄不合规范,需要在1-120之间,因此给默认年龄18");
          this.age = 18;
          //如果年龄不符合规范就给默认年龄,也就是18
      }

  }



  //写一个方法,返回属性信息
  public String info(){
      return "信息为 name= "+name+" age="+age+" 薪水"+salary;
  }
}

 

将构造器和setXXX结合

    public Person(String name, int age, double salary) {
//       this.name = name;
//       this.age = age;
//       this.salary = salary;
  //可以将set方法写入到构造器中,这样就可以验证
      setName(name);//这里没有写this,因为set和this是等价的
      setAge(age);
      setSalary(salary);
  }

 

去除函数传参提示 : settings -> editor -> inlay hints -> java - > parameter hints - >取消勾选 show parameter hints for

练习

com.edu.encap包: AccountTest.java和Account.java

创建程序, 在其中定义两个类:Account和AccountTest类体会Java的封装性。

  1. Account类要求具有属性:姓名(长度为2位3位或4位)、余额(必须>20)、 密码(必须是六位),如果不满足,则给出提示信息,并给默认值

  2. 通过setXxx的方法给Account的属性赋值。

  3. 在AccountTest中测试

  4. 提示知识点: String name = ""; int len = name.length();

posted @   comia  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示