作为Java开发,你一定要了解面向对象编程中为什么要使用get和set方法

一、由一个问题开始在进行面向对象开发中,在编写一个Class的时候,会定义这个Class的属性(字段)为Private,然后去生成对应的get和set方法,通过这样的方式去对属性进行操作,那你有没有思考过为什么要这样做呢?这样做有哪些好处呢?请先自行思考30秒,在看下面的内容。二、回顾相关知识回答这个问题之前,让我们先回顾一些的基础知识:1、访问修饰符,从访问的范围由小及大依次是:pri…

大家好,又见面了,我是全栈君。

一、由一个问题开始

在进行面向对象开发中,在编写一个Class的时候,会定义这个Class的属性(字段)为Private,然后去生成对应的get和set方法,通过这样的方式去对属性进行操作,那你有没有思考过为什么要这样做呢?这样做有哪些好处呢?

请先自行思考30秒,在看下面的内容。

二、回顾相关知识

回答这个问题之前,让我们先回顾一些的基础知识:

1、访问修饰符,从访问的范围由小及大依次是:private < default(默认)< protected < public ,通过访问修饰符 来控制和改变所修饰对象的可访问范围。

名称 说明 备注
public 可以被任何类访问
protected 可以被所有子类访问,可以被同一包中的所有类访问 子类没有在同一包中也可以访问
private 只能够被当前类的方法访问
缺省无访问修饰符 可以被同一包中的所有类访问 如果子类没有在同一个包中,也不能访问

由表格可知,设置成 private 只能够被当前类访问, 因为其他类不能够访问这个类中private 定义的属性,也就不能进行更改操作。那么可以说这个属性是 :安全的

但是很多时候,一个类中的属性是需要被其他类所使用(获取值/修改值)的,那么其他类要使用这个类中私有属性,当前类就必须提供可供外部类使用的方法,如公共的public 的方法,此时外部的其他来就可以通过提供的方法来操作私有的属性了。

上面这两段说明了问题中 为什么要这样做的第一个答案:隐藏内部实现细节,保证代码的安全,同时也可以提升数据的安全性。

举例说明:如果一个Person类有一个属性为age,假定 age 的范围是 0 -150 岁,如果你将age定义为public 那么任何类都可以进行访问,并修改age的值,此时age的值就是不安全的。使用private并提供get、set, 我们可以在修改age的 set方法中进行判断,如果age值不在 0—150之间,那么不容许对age进行修改的。其他类也只能通过get这唯一渠道去获取age的值。(又如:学生的成绩score 在 0-100之间,等等的例子)

用get()与set()可以控制变量

setAge(int age){ 
   
if(age<1||age>150throw new Exception(" 年龄不合法");
}else{ 
   
  this.age=age;
}

2、继承:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

说白了继承就是免费使用父类的特征和行为,实现代码的复用。这和我们问题有什么关系呢? 请看下面的代码例子,你会发现一点什么的。

- Person 人
setAge(int age){ 
   
if(age<1||age>150throw new Exception(" 年龄不合法");
}else{ 
   
  this.age=age;
}

- AlienPerson extends Person 外星人
setAge(int age){ 
   
if(age<1||age>500throw new Exception(" 年龄不合法");
}else{ 
   
  this.age=age;
}

三、总结

1、隐藏内部实现细节,保证代码的安全,同时也可以提升数据的安全性。

  • 使用类的人不关心你的类中有什么,只关心类提供了什么功能
  • 所以设计类的时候要尽量不提供public的成员变量,最好一个都没有,只提供接口
  • 提供类的人要尽量将类中有什么隐藏起来,只告诉使用者你能做什么

2、在继承的时候,更灵活的数据管理 。

3、by the way:目前我们使用的一些开源的框架,是必须要求你实现get和set的,否则会出错的。也可以称为是规范或者是框架设计要求。

四、参考

关于面向对象编程中很多人用get()和set()方法,而不用public的一点总结

《重构改善既有代码的设计》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121047.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 批处理 删除文件 脚本「建议收藏」

    批处理 删除文件 脚本「建议收藏」windows2003脚本:windows2000或windowsXP脚本:

    2022年10月27日
    0
  • Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值

    Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值Vue2.0传值方式:在Vue的框架开发的项目过程中,经常会用到组件来管理不同的功能,有一些公共的组件会被提取出来。这时必然会产生一些疑问和需求?比如一个组件调用另一个组件作为自己的子组件,那么我们如何进行给子组件进行传值呢?如果是电商网站系统的开发,还会涉及到购物车的选项,这时候就会涉及到非父子组件传值的情况。当然你也可以用Vuex状态管理工具来实现,这部分我们后续会单独介绍。先给大家介绍Vue常见的三种传值方式

    2022年5月13日
    35
  • python精彩编程200例-200G的Python初高级教程+项目实战案例源码,让你做有钱途的人才…

    2018年1月16日上午,教育部正式将人工智能、物联网、大数据处理正式划入高中新课标,这就意味着现在的学生16岁就要开始学习编程了!据统计,在所有专业级别的39000名开发人员中,有超过四分之一的开发人员在他们16岁之前就写了第一个代码。当然,编码不分早晚,在26岁以后才开始编写代码的开发者中,有36%是现在的高级甚至更高级别的开发人员,他们的职业发展会很快。不可否认,开发岗位的高…

    2022年4月7日
    42
  • ideal的debug_idea debug怎么用

    ideal的debug_idea debug怎么用Debug介绍Debug设置如上图标注1所示,表示设置Debug连接方式,默认是Socket。Sharedmemory是Windows特有的一个属性,一般在Windows系统下建议使用此设置,相对于Socket会快点。Debug常用快捷键快捷键 介绍 F7 在Debug模式下,进入下一步,如果当前行断点是一个方法,则进入当…

    2022年8月31日
    3
  • asp.net cms_基于asp的开源项目

    asp.net cms_基于asp的开源项目随着网络技术的发展,目前国内CMS的开发商越来越多,各自都有其独特的优势,大家在选择的时候觉得眼花缭乱,不知道选择哪个比较好,我个人认为开源的CMS还是适合我们学习及研究使用,下边就几个国内的asp.net开源CMS进行简单介绍。1.We7CMS We7CMS是由西部动力开发的一款充分发掘互联网Web2.0(如博客、RSS等)的信息组织优势,将其理念利用到政府企事业网站的构建、组织

    2022年9月27日
    0
  • JVM架构和GC垃圾回收机制(JVM面试不用愁)[通俗易懂]

    JVM架构和GC垃圾回收机制(JVM面试不用愁)[通俗易懂]JVM架构和GC垃圾回收机制详解JVM架构图分析下图:参考网络+书籍,如有侵权请见谅(想了解Hadoop内存溢出请看:Hadoop内存溢出(OOM)分类、参数调优化)JVM被分为三个主要的子系统(1)类加载器子系统(2)运行时数据区(3)执行引擎1.类加载器子系统Java的动态类加载功能是由类加载器子系统处理。当它在运行时(不是编译时)首次引用一个类时,它加载、链…

    2022年4月28日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号