java中对get和set方法的理解

来源:互联网 发布:五星出东方利中国知乎 编辑:程序博客网 时间:2024/06/05 01:18

1、首先,理解一下java面向对象编程中的封闭性和安全性。


封闭性即对类中的域变量进行封闭操作,即用private来修饰他们,如此一来其他类则不能对该变量访问。这样我们就将这些变量封闭在了类内部,这样就提高了数据的安全性,当我们想要操作这些域变量怎么办呢?我们可以通过两种方法,第一中即通过public方式的构造器(或称构造函数),对象一实例化就对该变量赋值。第二种就是通过上面提到的set和get方法,这里我举一个特定的例子,我定义一个Person类,该类中有name、age这两个私有域变量,然后我定义setName()、getName()、setAge()、getAge()这四个方法,通过这四个方法来实现对name和age的操作。这样一来,我不用直接对Person类中的域变量操作,而是通过set和get方法间接地操作这些变量,这样就能提高域变量的安全性,同时又保证了域变量的封装性。

/** * Created by Chengrui on 2015/7/21. */public abstract class Operation {    private double numberA;    private double numberB;    public double getNumberA() {        return numberA;    }    public void setNumberA(double numberA) {        this.numberA = numberA;    }    public double getNumberB() {        return numberB;    }    public void setNumberB(double numberB) {        this.numberB = numberB;    }    public abstract double getResult();}

2、知乎上有人是这么回答的,我觉得回答的也很精彩:


java的get和set方法,其实是对C#所带来的get/set属性方法的迁就,也是JavaBean的一种规范定义。就是通过get/set方法代替直接暴露操作类内部属性(属性设为private,只暴露get/set方法),可以在方法上规定属性的读写规则来控制保护属性值。


3、最后我们再来看看网上精华回帖:


同学一
这是java的风俗。就好比所有人都在放屁之前脱裤子的社会里,你不脱就是新手。
实际情况确实多数getter/setter都是没有用的。
以OO流派的说法,对象的状态都因该是私有的,对象之间只有message,这就是这个风俗的理论基础。

同学二
1.懂OOP的程序员,会告诉你,这样做为了封装..
2.做过3-5年Java企业项目的人,并被客户需求虐待过的同学会告诉你,这样做为了程序易于修改、维护
3.懂模式设计的合格程序员,会告诉你,这样写能扩展成观察者模式,备忘录模式。。。
4.做过架构设计的牛人,会告诉你,一切为了卸耦..

同学三
很简单,当你有一天需要加入一下条件或者钩子操作的时候你就知道好处啦。
比如现在你写成public的,所有的地方都直接访问,有一天,你需要在这个属性改变的时候做一些观察者的操作,比如发邮件通知,或者其他操作的时候你就杯具啦,你必须在工程中search到底多少地方调用过,并且在每个后面去加上一段sendEmailIfChange(userid,contents)代码,但是如果是封装了,就直接在set里面判断ifChange然后改了。
哪个好,你懂的。

同学四
private 恰恰告诉你,这段代码可以方便的修改,而不是麻烦的修改。
假如你没用settter,gettter.
案列1:系统要求所有对code:String设置值的时候需要记录日志。你原来的代码都是这个样子的:
code = "SomeCode...";
你可能必须得在每处出现此语句的前面加上Log.in(code);有没有想过如果那段代码不是你写的,你没有动那段代码的权限,又或者代码已经通过jar包封成库,发布给客户使用,你咋办?
如果用setter,情形如下:
Java代码 收藏代码
public void setCode(String code)
{
Log.in(code);
this.code=code;
}


同学五
封装:任何类成员变量都不应该被外部直接访问(且不说Javabean规范本身就是这样)

同学六
使用 80% 的冗余代码来解决 20% 不一定出现的问题


0 0
原创粉丝点击