Java Learning – Getter and Setter

在看到接口和继承时,讲到了setter和getter,那么这两个方法的存在意义到底是什么呢?上网查了下,都没有仔细讲解,只是说应该这样,保护成员变量,那么到底怎么保护?如果不使用,会导致什么?这些很少有人解释,也许是太简单了?!Anyway,下面我将针对这些疑问进行意义解答。

首先什么地方会用到这两种方法?

JAVA是面向对象的(OOB)语言,一切皆为对象,根据《面向接口编程详解(一)思想基础》作者的解释,OOB要符合真实世界的运行状况。在真实世界,很多东西是被隐藏而不被对象(人)所知道,如你不需要知道汽车的内部发动机是如何运行的,只要会开车就行了,开车的界面就是接口,在接口上,我要保证不能通过挪动方向盘就把车玩坏了,所以我给方向盘做了限制,只能左右转动,不能上下转动,因为我的内部机制不了解上下运动,所以这就需要使用setter和gettr的方法,只接收左右信息,不接收上下信息(当然现实中也没上下,只是打比方)。

下面拿一个程序来说明,如果不用setter会有什么后果?

功能类:

package test;
public class HelloClass {
	//private variable
	private String hello = "";
	//setter
	public void setHello(String val) {
	    if(val=="ok") //prevent ok string
	        this.hello = val;
	    else
	    	System.out.println("Initial failed for var hello!");
	}
	//getter
	public String getHello() {
	    return this.hello;
	}
}

主方法类:

package test;
public class Hello {
	//main function
	public static void main(String[] args) {
	    HelloClass hello = new HelloClass();    //new HelloClass object
	    hello.setHello("no");         //set the private variable
	    System.out.println(hello.getHello());   //get the private variable and print out
	}
}

如果直接运行主方法类,那么在功能类的setHello方法执行else的语句,这是出于安全考虑,因为我的内部程序只能识别“ok”,其他的变量都不接受。如果在主方法类中直接赋值,如

String hello = ""; // 功能类去掉private
hello.hello="No"; //在主方法中直接赋值
//hello.setHello("ok"); 去掉setter方法

这样打印出来的结果就跟你设置的一样了,这就不符合原本的用意了,有时候错误的复制,可能导致内部程序崩溃。

什么时候不需要setter和getter?

如果内部程序对成员变量没有任何限制,那么没有必要用这两种方法,也没有必要设置私有成员变量,但在实际案例中,出于安全考虑,一般都会将成员变量设置为private,并把内部的东西封装起来,不让别人知道,只留出公共接口就可以了

下面是几篇讲解getter和setter不错的文章:

getter和setter方法
Java 入門指南 – getter 與 setter >>> 需要VPN

本文出自 Frank's Blog

版权声明:


本文链接:Java Learning – Getter and Setter
版权声明:本文为原创文章,仅代表个人观点,版权归 Frank Zhao 所有,转载时请注明本文出处及文章链接
你可以留言,或者trackback 从你的网站

留言哦

blonde teen swallows load.xxx videos