002.面向对象的三大特性之封装

1.封装是什么?以及为什么要进行封装?

   通常情况下可以给成员变量赋值一些合法但不合理的数值,这种情况在编译阶段和运行阶段都不会报错或给出任何的提示信息,此数值虽然合法但与现实生活不符;为了避免上述问题的发生,就需要对成员变量进行密封包装处理来保证该成员变量的合法合理性,这种机制就叫做封装。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。

2.如何进行封装?
  (1)私有化成员变量,使用private关键字修饰;
  (2)提供公有的get和set方法,在方法体中进行合理值的判断,使用public关键字修饰;
  (3)在构造方法中使用set方法进行合理值的判断;
 
3.事例如下/*Person.java*/
 1 /*
 2      编程实现Person类的封装
 3  */
 4 public class Person{
 5     //1.私有化成员变量,使用private关键字修饰
 6     private String name; 
 7     private int age;
 8     private String country;
 9     //使用static关键字修饰成员变量表示提升为类层级只有一份被所有对象共享
10     //public static String country;
11 
12     //3.在构造方法中调用set方法进行合理值的判断
13     public Person(){
14     }
15     public Person(String name, int age, String country){
16         setName(name);
17         setAge(age);
18         setCountry(country);
19     }
20 
21     //2.提供公有的get和set方法,在方法体中进行合理值的判断
22     public String getName(){
23         return name;
24     }
25     public void setName(String name){
26         this.name = name;
27     }
28     public int getAge(){
29         return age;
30     }
31     public void setAge(int age){
32         if(age > 0 && age < 150){
33             this.age = age;
34         }else{
35             System.out.println("年龄不合理!!!");
36         }
37     }
38     public String getCountry(){
39         return country;
40     }
41     public void setCountry(String country){
42         this.country = country;
43     }
44 
45     public void show(){
46         System.out.println("我是" + getName() + ",今年" + getAge() + "岁了,来自" + getCountry() + "!");
47     }
48 
49     //自定义成员方法描述吃饭的行为
50     public void eat(String food){
51         System.out.println(food + "真好吃!");
52     }
53     //自定义成员方法描述娱乐的行为
54     public void play(String game){
55         System.out.println(game + "真好玩!");
56     }
57 }
View Code

 

posted @ 2018-10-27 14:33  吉祥街  阅读(199)  评论(0编辑  收藏  举报