在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
1. 良好的封装能够减少耦合。
2. 类内部的结构可以自由修改。
3. 可以对成员变量进行更精确的控制。
4. 隐藏信息,实现细节。
1. 修改属性的可见性来限制对属性的访问(一般限制为private)
例如:
public class Person { private String name; private int age; }
这段代码中,将 name 和 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; } }一般情况下:主要用于将成员变量私有化,最好再提供对应的set(),get()方法。提高对数据访问的安全性。
this指针:
(1)this:代表所在类的对象的引用 方法被哪个对象调用,this就代表那个对象(2)使用this的情况: 局部变量和成员变量重名。这时候的this.变量名,代表的是所在类的对象的引用。
不加this
/* 创建一个类。然后 this 指针的作用就是用来区分两个相同变量的区别 如果不用的话,就搞的是默认值 */ class person{ //一般情况下,数据变量都得用private private String name; private int age; //一个成员变量一般情况下,有一个获取成员变量,一个得到成员变量 public void setname(String n){ name = n; } public String getname(){ return name; } public void setage(int k){ age = k; } public int getage(){ return age; } //空参构造函数 person (){ } //带参构造函数,函数重载 person (String name,int age ){ name = name; age = age; } public void talk(){ System.out.println(name + "," + age +"岁会说话") ; } } class This { public static void main(String[] args){ /*person gupei = new person(); gupei.setname("王二麻子"); System.out.println(gupei.getname()); gupei.setage(18); System.out.println(gupei.getage()); */ person gupei = new person("王二麻子",18); gupei.talk(); } }结果会以字符串和整型的初始化来表示,没有达到想要的效果。
/* 创建一个类。然后 this 指针的作用就是用来区分两个相同变量的区别 如果不用的话,就搞的是默认值 */ class person{ //一般情况下,数据变量都得用private private String name; private int age; //一个成员变量一般情况下,有一个获取成员变量,一个得到成员变量 public void setname(String n){ name = n; } public String getname(){ return name; } public void setage(int k){ age = k; } public int getage(){ return age; } //空参构造函数 person (){ } //带参构造函数,函数重载 person (String name,int age ){ this.name = name; this.age = age; } public void talk(){ System.out.println(name + "," + age +"岁会说话") ; } } class This { public static void main(String[] args){ /*person gupei = new person(); gupei.setname("谷沛"); System.out.println(gupei.getname()); gupei.setage(18); System.out.println(gupei.getage()); */ person gupei = new person("谷沛",18); gupei.talk(); } }这样就达到了初始化的目的。
