java知识28 Java封装【多测师】

一、面向对象中,封装是指将抽象性函式接口的实现细节部分包装、隐藏起来的方法
1.封装可以被认为是一个屏障,防止该类的代码和数据被外部类定义的代码随机访问
2.要访问该类代码和数据需要接口控制
3.封装可以修改自己的实现代码,而不用修改调用我们代码的程序片段
4.精确控制成员变量
5.隐藏信息,实现细节

二、封装的步骤
1.修改属性的可见性来限制对属性的访问(一般用private来限制)
这段代码中 将name和age属性设置为私有,只有本类可以访问,其他类访问不了 
public class Person { 
    private String name; 
    private int age; 
}
2.对每个值属性提供对外的公有方法访问,用于对私有属性的访问
public class Person{
    private String name;
    private int age;

    public int getAge(){
      return age;
    }

    public String getName(){
      return name;
    }

    public void setAge(int age){
      this.age = age;
    }

    public void setName(String name){
      this.name = name;
    }
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

三、举例
定义一个Person类,给类定义一个私有属性age,setAge和getAge方法是为了别的类访问Person类的私有属性age定义的 代码如下:
class Person {
  private int age;

  public void setAge(int age) {
   this.age = age;
  }

  public int getAge() {
   return age;
  }
}

public class Foo {
  public static void main(String[] args) {
   // 一个类的私有属性在其他类中只能通过get和set方法去访问
   Person p = new Person();
   p.setAge(18);// 设置属性age的值
   int age = p.getAge();
   System.out.println(age);// 输出为5
  }
}
运行结果:18

四、举例2
下面实例public方法是外部类访问该类成员变量的入口,这些方法被称为getter和setter方法,因此要访问类中私有成员变量的类都要通过这些getter和setter方法
调用方法:
public class RunEncap {
  public static void main(String[] args) {
   EncapTest encap = new EncapTest();
   encap.setName("dd");
   encap.setAge(20);
   encap.setIdNum("1234ms");

   System.out.println("Name:" + encap.getName() + "Age:" + encap.getAge());
  }
}

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;
  }
}

运行结果: Name:dd Age:20
原文地址:https://www.cnblogs.com/xiaoshubass/p/13110973.html