封装介绍

封装(Encapsulation)是面向对象编程(OOP)的三大特性之一(另外两个是继承和多态)。它就像给你的代码穿上了一件"智能外套",既能保护内部数据,又能提供简洁的交互方式。

想象你有一个存钱罐:

  • 不封装:罐子完全敞开,任何人都可以随意拿取或放入钱币
  • 封装后:罐子有一个投币口(方法)和显示窗口(方法),但钱币不能被直接触碰

这就是封装的核心思想:隐藏对象的内部细节,仅暴露必要的操作接口

封装的优点

  • 良好的封装能够减少耦合。
  • 类内部的结构可以自由修改。(内部变更不影响外部)
  • 可以对成员变量进行更精确的控制。
  • 隐藏信息,实现细节。

实现封装的步骤

  • 修改属性的可见性来限制对属性的访问(一般限制为private)

代码语言:javascript

AI代码解释

public class BankAccount {
    private double balance;  // 私有变量,外部无法直接访问
    
    // 公共方法作为访问接口
    public double getBalance() {
        return balance;
    }
    
    public void deposit(double amount) {
        if(amount > 0) {
            balance += amount;
        }
    }
}

将类中的balance变量设置成了私有,外部无妨访问,从而实现了对信息的隐藏。

  • 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问

代码语言:javascript

AI代码解释

public void setBalance(double amount) {
    if(amount >= 0) {  // 添加验证逻辑
        this.balance = amount;
    }
}

通过setter方法,getter方法来实现对私有变量的访问。

代码语言:javascript

AI代码解释

/* 文件名: EncapTest.java */
public class EncapTest{
 
   private String name;
   private String idNum;
   private int age;
 
   public int getAge(){
      return age;
   }
 
   public String getName(){
      return name;
   }
 
   public String getIdNum(){
      return idNum;
   }
 
   public void setAge( int newAge){
      age = newAge;
   }
 
   public void setName(String newName){
      name = newName;
   }
 
   public void setIdNum( String newId){
      idNum = newId;
   }
}

所以要访问任何私有变量的类都要通过这些setter、getter方法:

代码语言:javascript

AI代码解释

/* F文件名 : RunEncap.java */
public class RunEncap{
   public static void main(String args[]){
      EncapTest encap = new EncapTest();
      encap.setName("James");
      encap.setAge(20);
      encap.setIdNum("12343ms");
 
      System.out.print("Name : " + encap.getName()+ 
                             " Age : "+ encap.getAge());
    }
}

接口介绍

  • 接口(Interface)是Java编程语言中一个非常重要的概念,它是抽象方法的集合,用于定义行为规范。
  • 接口是一种完全抽象的类,它只包含抽象方法和常量(在Java 8之前)。接口定义了一组方法签名(没有实现),任何实现该接口的类都必须提供这些方法的具体实现。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐