一、面向对象中,封装是指将抽象性函式接口的实现细节部分包装、隐藏起来的方法 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