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

本文介绍了Java中封装的概念及其实现方式,包括如何通过设置属性为private并提供public的setter和getter方法来控制对属性的访问。文章还讨论了这种方法的好处以及如何正确地使用这些方法。
摘要由CSDN通过智能技术生成

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

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

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

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值