面向对象(封装)get set的由来

封装:是指隐藏对象的属性和实现细节,进对外提供公共访问方式

好处:将变化隔离。便于使用,提高重用性,提高安全性

封装原则:将不需要对外提供的额内容隐藏起来,把属性都隐藏,提供公共方法对其访问

 1 package com_package2;
 2 
 3     class Age {
 4     int age;
 5    /*/ public void Haha(int t)
 6     //{   if(t>=0)
 7    //     age=t;
 8        else
 9         age=0;
10     }
11    // public int  getHaha(int t)
12   //  {
13    //     return t;
14         
15    // }**/
16     void speak()
17     {
18         System.out.println("age="+age);
19         
20     }
21 
22 }

首先注意观察:Age类中的属性age没有说公有,也没有说私有,再加上这个类也没说是私有和公有,那么这个属性是不受保护的,创建对象后,age是可以被改动也可以被访问的

但是如果age属性变成了private那么AgeDemo是无法访问到age属性的

 1 package com_package2;
 2 
 3 public class AgeDemo {
 4     public static void main(String[]args)
 5     {
 6         Age a = new Age();//创建对象
 7         //a.Haha(20);
 8         a.age=20;//访问Age类中的年龄属性
 9         a.speak();//访问Age类中的speak方法
10         
11     }
12 
13 }

这里的age是不被保护的

再来看,要是想要访问private属性,那么,可以在中间加一个给属性赋值的public方法如下:

 1 package com_package2;
 2 
 3     class Age {
 4     private int age;
 5    public void Haha(int t)
 6    {   age=t;
 7     }
 8    // public int  getHaha(int t)
 9   //  {
10    //     return t;
11         
12    // }
13     void speak()
14     {
15         System.out.println("age="+age);
16         
17     }
18 
19 }

在这里面,age是私有的其他类无法访问,但是加了一个public方法来对age属性进行赋值

 1 package com_package2;
 2 
 3 public class AgeDemo {
 4     public static void main(String[]args)
 5     {
 6         Age a = new Age();
 7         //a.Haha(20);
 8         a.Haha(20);
 9         a.speak();
10         
11     }
12 
13 }

通过Haha对age进行访问得到age=20

在此基础上可以增加一点算法:

 1 package com_package2;
 2 
 3     class Age {
 4     private int age;
 5    public void Haha(int t)
 6    {  if(t>=0&&t<=130)
 7        age=t;
 8       else
 9        age=-1;
10     }
11    // public int  getHaha(int t)
12   //  {
13    //     return t;
14         
15    // }
16     void speak()
17     {
18         System.out.println("age="+age);
19         
20     }
21 
22 }
 1 package com_package2;
 2 
 3 public class AgeDemo {
 4     public static void main(String[]args)
 5     {
 6         Age a = new Age();
 7         //a.Haha(20);
 8         a.Haha(-20);
 9         a.speak();
10         
11     }
12 
13 }

这样就可以判断年龄的可能性  得-1

由此演变成get set方法:

 1 package com_package2;
 2 
 3     class Age {
 4     private int age;
 5    public void setAge(int t)
 6    {  if(t>=0&&t<=130)
 7        age=t;
 8       else
 9        age=-1;
10     }
11     public int  getAge(int t)
12     {
13         return t;
14         
15     }
16     void speak()
17     {
18         System.out.println("age="+age);
19         
20     }
21 
22 }
 1 package com_package2;
 2 
 3 public class AgeDemo {
 4     public static void main(String[]args)
 5     {
 6         Age a = new Age();
 7         //a.Haha(20);
 8         a.setAge(-20);
 9         a.speak();
10         
11     }
12 
13 }

这样的演变就足以说明set,get方法的由来。通常情况下,会将类中的成员变量私有化,为了避免属性直接被访问导致数据错误,并对外界听了公共的访问方式,对该

属性进行访问,这样做的好处是:可以对属性进行可控,而对属性访问的公共方法名称规范定义的格式是:set属性(),get属性()。当然get(),set()都可以在系统中手动生成。

关于这两个方法:Java中的私有属性set()是给属性赋值的,get()是取得属性值的
被设置和存取的属性一般是私有
主要是起到封装的作用,不允许直接对属性操作
set()和get()不一定同时存在,看程序需求

原文地址:https://www.cnblogs.com/mmlovejj/p/4422573.html