首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有时我不明白为什么我们甚至将每个字段都设为私有字段,然后为它们创建受保护或公共的getter

在面向对象编程中,将字段设为私有字段并为其创建受保护或公共的getter方法是一种封装的实践。封装是面向对象编程的三大特性之一,它允许我们将数据和操作数据的方法封装在一个类中,隐藏内部实现细节,只暴露必要的接口给外部使用。

将字段设为私有字段的主要目的是为了保护数据的完整性和安全性。私有字段只能在类的内部访问,外部无法直接修改它们的值,只能通过类提供的公共接口进行间接访问和修改。这样可以防止外部代码直接修改字段的值,从而避免了意外的错误和不一致性。

为私有字段创建受保护或公共的getter方法是一种良好的实践,它允许外部代码以只读的方式访问字段的值。通过getter方法,我们可以对字段的访问进行控制,可以添加额外的逻辑来验证和处理字段的值,确保返回的值符合预期。同时,通过getter方法,我们可以隐藏字段的具体实现细节,如果需要修改字段的实现方式,只需修改getter方法的实现,而不会影响到外部代码。

尽管将字段设为私有字段并创建getter方法可能会增加一些额外的代码量,但它带来的好处是值得的。这种封装的做法提高了代码的可维护性和可扩展性,减少了代码的耦合性,使得代码更加健壮和可靠。

对于这个问题,可以给出以下完善且全面的答案:

在面向对象编程中,将字段设为私有字段并为其创建受保护或公共的getter方法是一种封装的实践。封装允许我们将数据和操作数据的方法封装在一个类中,隐藏内部实现细节,只暴露必要的接口给外部使用。

将字段设为私有字段的主要目的是为了保护数据的完整性和安全性。私有字段只能在类的内部访问,外部无法直接修改它们的值,只能通过类提供的公共接口进行间接访问和修改。这样可以防止外部代码直接修改字段的值,从而避免了意外的错误和不一致性。

为私有字段创建受保护或公共的getter方法是一种良好的实践,它允许外部代码以只读的方式访问字段的值。通过getter方法,我们可以对字段的访问进行控制,可以添加额外的逻辑来验证和处理字段的值,确保返回的值符合预期。同时,通过getter方法,我们可以隐藏字段的具体实现细节,如果需要修改字段的实现方式,只需修改getter方法的实现,而不会影响到外部代码。

尽管将字段设为私有字段并创建getter方法可能会增加一些额外的代码量,但它带来的好处是值得的。这种封装的做法提高了代码的可维护性和可扩展性,减少了代码的耦合性,使得代码更加健壮和可靠。

在腾讯云的云计算服务中,可以使用云服务器(CVM)来搭建和管理云上的虚拟机实例。云服务器提供了灵活的计算能力,可以根据业务需求进行弹性扩容和缩容。您可以通过以下链接了解更多关于腾讯云服务器的信息:腾讯云服务器(CVM)

此外,腾讯云还提供了丰富的云原生服务,如容器服务(TKE)、无服务器云函数(SCF)等,用于支持云原生应用的开发和部署。您可以通过以下链接了解更多关于腾讯云原生服务的信息:腾讯云原生服务

总结起来,将字段设为私有字段并为其创建受保护或公共的getter方法是一种封装的实践,它提高了代码的可维护性和可扩展性,保护了数据的完整性和安全性。在腾讯云的云计算服务中,可以使用云服务器(CVM)来搭建和管理云上的虚拟机实例,同时还提供了丰富的云原生服务来支持云原生应用的开发和部署。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么是面向对象编程?OOP 深入解释

然后我们可以设置类中定义属性值来描述车,而不影响其他对象类模板。 然后我们可以重用这个类来表示任意数量汽车。...封装内部软件代码实现隐藏在一个类内部,内部对象内部数据隐藏起来。 封装需要将一些字段定义为私有的,一些定义为公共私有/内部接口: 可从同一类其他方法访问方法和属性。...在类中,大多数编程语言都有公共保护私有部分。公共部分是从外部世界程序中其他类访问方法有限选择。Protected 只能被子类访问。 私有代码只能从该类中访问。...回到我们狗/主人例子,封装是理想,这样主人就无法访问关于其他人私人信息。 注意:  JavaScript 具有私有保护属性和方法。_保护字段以;为前缀 私有字段以 ....保护字段是继承。私人不是。

82610

JavaScript 类完整指南

字段3.1 公共实例字段3.2 私有实例字段3.3 公共静态字段3.4 私有静态字段4. 方法4.1 实例方法4.2 Getter 和 Setter4.3静态方法5....对公有字段访问更新没有任何限制。你可以读取它们值并将其分配给构造函数、方法内部以及类外部公有字段。 3.2 私有实例字段 封装是一个重要概念,可让你隐藏类内部细节。...要访问静态字段,你必须使用类,后面跟字段名称:User.TYPE_ADMIN和User.TYPE_REGULAR。 3.4 私有静态字段 有时甚至静态字段也是你要隐藏实现细节。...在这方面,你可以静态字段设为私有。 要使静态字段成为私有字段,请在字段名称前添加特殊符号 #:static #myPrivateStaticField。 假设你想限制 User 类实例数量。...让我们 getName() 方法设为私有: class User { #name; constructor(name) { this.

99520
  • 你需要知道 JavaScript 类(class)这些知识

    公共字段访问更新没有限制。可以读取构造函数、方法和类外部公共字段并将其赋值。 3.2 私有实例字段 封装是一个重要概念,它允许我们隐藏类内部细节。...3.3 公共静态字段 我们还可以在类本身上定义字段:静态字段。这有助于定义类常量存储特定于该类信息。...3.4 私有静态字段 有时我们也想隐藏静态字段实现细节,在时候,就可以静态字段设为私有。...为了确保Username属性不能为空,我们私有字段#nameValue封装在getter和setter中: class User { #nameValue; constructor(name...继承是使用extends关键字实现:可以轻松地从父类创建子类,super关键字用于从子类访问父类。 要利用封装,字段和方法设为私有以隐藏类内部细节,私有字段和方法名必须以#开头。

    69310

    Getter & Setter:使用还是废弃

    私有变量 为什么我们要使用私有的实例变量呢? 因为我们不希望其他类直接依赖于这些变量。而且在心血来潮时,我们还可以灵活修改变量类型和实现。...然而,为什么程序员们自动在对象中加入getter和setter方法,以此对外暴露私有变量,就如同这些变量是公有的一样?...Getter和Setter使得API更加稳定。 比如,假设类中有一个公共属性,它可以被其他类直接存取。一段时间后,你想要在读取保存这个公共属性时候添加额外逻辑。...但是我们不是非常虔诚那些人。制定规则是有理由。对于私有属性规则理由并不适用于这个特例。这是一个特殊例外,也告诉人们不要在他们类中使用公共属性,但也存在例外。...但是,为每一个属性创建getter和setter方法确实有些极端。而且这也要根据具体情况来定,有些时候你仅仅希望有一个单纯数据对象而已。应该为真正需要属性添加存取方法。

    1.3K60

    Groovy 面向对象编程-类成员中字段和属性学习-第三篇

    字段-Fields 字段是指存储数据类、接口特征成员。Groovy源文件中定义字段具有: 强制访问修饰符(公共public、保护protected私有private)。...示例如下: class Demo { //一个名为id私有的int型字段 private int id //一个名为description保护String类型字段...对于拆分定义,我们可以编写具有相同名称和类型字段和属性。只有一个字段属性可以具有初始值。 对于拆分属性,字段注释保留在属性背景字段上。...例如,如果支持字段应该是保护protected而不是私有的private 实现示例如下所示: class HasPropertyWithProtectedField { protected...3.5 显示访问方法 如果类中存在gettersetter显式定义,则不会自动生成get和set方法。这允许您根据需要修改此类gettersetter正常行为。

    76310

    Python类中属性

    将为自己创建一个类实例,所以我称它为 marcin。你可以为自己创建一个实例。...使用私有方法属性有点像在淋浴时监视,你可以看到我想隐藏东西。 然而,有时候出于这个原因其他原因,你可能想要修改现有类;这可能意味着覆盖私有属性方法。...从理论上讲,这些属性是私有的,所以你不应该使用它们有时候,使用它们甚至可能破坏一个类。这也是一种保护措施;你知道这些属性是私有的,所以最好不要碰它们。...然而...看起来方法是完全保护,尽管不久前声称在Python中,私有属性并不是完全保护。那么,到底发生了什么呢? 我们刚刚经历了名称修饰工作原理。...在编写类时,有时你可能希望隐藏一些实现细节,你可以通过某些属性和方法设为私有来实现这一点。但它们永远不是真正私有。 这种方法对来说听起来并不自然。

    17930

    JavaScript中类有什么问题呢?

    我们可以在公有和私有之间定义属性和方法可见性(尽管私有字段仍然是一个实验性特性)。 我们可以为属性定义getter和setter。 我们可以实例化类。 那么为什么说类是语法糖呢?...该语言背后团队通过创建一些可以翻译成JS东西,无疑 JS 推向了极限。这反过来也限制了它们能力。...保护属性和方法 我们已经有了公开可见性,而且我们很快就得到了方法和属性私有可见性(通过#前缀)。...认为下一步应该是添加保护可见性,然而,现在还没有,认为如果你想要有一个合适OOP体验,这三个都是必要。...保护属性和方法只能从类内部一个子类中访问(与私有可见性相反,私有可见性访问限制为只能访问父类)。 今天就跟大家分享到这里了,是小智,我们下期再见。

    1.4K10

    为什么要用Getter和Setter方法,而不是公开属性

    大多数字段访问都是通过Getter和Setter方法来间接访问,为什么不直接字段设置为公开属性Public呢?答案在于前者未来可能性。...了解到,通过公共访问修饰符,类一个字段对于任何包都是可访问,并且使用getter/setter,实际上正在做相同事情——使字段私有化,而getter/setter方法是公共,因此它可以被任何包访问...那么,下面属性name和value区别是什么呢? ? 慢慢地,意识到了为什么我们使用Getter和Setter,以及为什么它们是重要。...理解,但一般来说,我们不写任何东西在Getter和Setter。我们只返回并设置字段,就像公开字段一样。那你为什么要说这些?...为了回答这个问题,说通过编写Getter和Setter,我们创建了一个用于将来添加任何验证方法条款,目前,没有验证,但是如果将来出现任何错误,我们只是在Setter中添加验证逻辑。

    2.2K10

    Flutter必备语言Dart教程03 - 类,泛型

    这里我们创建两个命名构造函数,它们只有name参数,并调用默认Pug构造函数。 方法 类中方法与Dart中定义普通方法类似。 ? 覆盖方法也很简单。 ?...但有时你想自定义属性getter和setter,在Dart中你可以使用 get 和 set 关键字来自定义getters和setters。 ?...现在类属性仍然可见并且可以随意更改,接下来我们把类属性设为私有。 控制可访问性 默认情况下,您在类中定义每个属性和方法都是公共,可以直接访问。...在Dart中,您可以通过在其名称前添加“_”来使任何变量方法变为私有。让我们name属性设为私有。 ? 抽象类和方法 您可以使用abstract关键字,在Dart中创建一个抽象类。 ?...静态方法 要使字段/方法静态,只需在声明之前,添加关键字static。 ? 枚举 Dart支持枚举,并像其他语言一样使用。如果你来自Java语言,会很熟悉它们。 ? 泛型 Dart全面支持泛型。

    1.3K10

    你了解 Typescript 吗

    参考:《 TypeScript全部资料,以后放这儿了》 为什么是Typescript 大型项目常见问题 类型不明确,甚至在使用中转换。...它有时被称做“鸭式辨型法”“结构性子类型化”。 在TypeScript里,接口作用就是为这些类型命名和为你代码第三方代码定义契约。...公共私有保护修饰符: public(默认): 可以自由访问程序里定义成员 private: 当成员被标记成private时,它就不能在声明它外部访问 protected: protected...,每行代码都能记得,每个变量知道是什么。...我们还经常出现接口调整,甚至字段名调整情况。 然后我们上了Typescript。 当时我们框架是AngularJS(Angular1版本),但是也照样使用了ts。

    5.6K10

    JavaScript中类有什么问题

    我们可以在公有和私有之间定义属性和方法可见性(尽管私有字段仍然是一个实验性特性)。 我们可以为属性定义getter和setter。 我们可以实例化类。 那么为什么说类是语法糖呢?...该语言背后团队通过创建一些可以翻译成JS东西,无疑 JS 推向了极限。这反过来也限制了它们能力。...保护属性和方法 我们已经有了公开可见性,而且我们很快就得到了方法和属性私有可见性(通过#前缀)。...认为下一步应该是添加保护可见性,然而,现在还没有,认为如果你想要有一个合适OOP体验,这三个都是必要。...保护属性和方法只能从类内部一个子类中访问(与私有可见性相反,私有可见性访问限制为只能访问父类)。 今天就跟大家分享到这里了,是小智,我们下期再见。

    1.6K10

    java反射详解【转】与 反射是否会破坏类封装性见解

    也就是jvm中有N多实例每个类都有该Class对象。(包括基本数据类型) Class 没有公共构造方法。...Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中defineClass 方法自动构造。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。...某个构造方法"可以是私有的,保护、默认、公有;   *         *          调用构造方法:   *          Constructor-->newInstance(Object...,保护、默认、公有;   调用构造方法: Constructor-->newInstance(Object... initargs) 2、newInstance是 Constructor类方法(管理构造函数类... *      1).Field[] getFields():获取所有的"公有字段"   *      2).Field[] getDeclaredFields():获取所有字段,包括:私有保护、默认

    69950

    深入剖析 Java 类属性与类方法应用

    Java 类属性Java 类属性,也称为字段,是类中变量。它们用于存储与类相关数据。...:public:公开访问private:私有访问protected:保护访问default:默认访问示例public class Main { private int x; // 私有属性 public...为了方便起见,也可以类属性定义为public,但这会使它们更容易被意外更改。建议使用getter和setter方法来访问和修改类属性,以便更好地控制对属性访问。...修饰符可以使用修饰符来控制类方法访问权限:public:公开访问private:私有访问protected:保护访问default:默认访问示例:public class Main { private...,例如:创建新实例验证输入提供工具类方法实例方法通常用于操作类实例,例如:获取设置属性值执行计算改变对象状态可以使用 final 关键字声明类方法,使其无法被重写。

    20210

    java反射详解与反射是否会破坏类封装性见解

    熟悉一下加载时候:Class对象由来是class文件读入内存,并为之创建一个Class对象。 ? 其中这个Class对象很特殊。...Class 类实例表示正在运行 Java 应用程序中类和接口。也就是jvm中有N多实例每个类都有该Class对象。(包括基本数据类型) Class 没有公共构造方法。...Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中defineClass 方法自动构造。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。...):获取"某个构造方法"可以是私有的,保护、默认、公有;   调用构造方法: Constructor-->newInstance(Object... initargs) 2、newInstance... *      1).Field[] getFields():获取所有的"公有字段"  *      2).Field[] getDeclaredFields():获取所有字段,包括:私有保护、默认

    2.3K30

    【内部分享】看向未来 - 近期 TC39 提案汇总

    - 公共方法、字段可以定义为静态 Static private fields/methods - 私有方法、字段可以定义为静态 比如提案中提到,自定义一个点击就可以 +1 Element: class...假如,我们需要在公有方法中设置某个私有字段,但不知道传参是不是我们对象,该怎么办呢?...我们保护好自己 想让代码执行在原生且安全环境中,不希望受到别人影响,比如,外面的脚本可能劫持了一些方法,比如 garfish 就劫持了 localStorage、insertElement...2.3.1.2 Auto accessor 再来说说这个 auto accessor,这个提案给类字段加了个 accessor 关键字,大概是自动生成一个私有字段 getter 和 setter: class...2.4.1 Partial Application https://github.com/tc39/proposal-partial-application 本质上就是 「curry」 ,我们有时候,需要创建某些参数已经确定函数

    90020

    C++类设计和实现十大最佳实践

    需要很大耐心重构一个大类,甚至可能需要从头重新创建所有东西。以下是一些重构建议: BigClass中逻辑必须被分成更小类。...许多文章、书籍和网站警告不要采用这种做法,但有时实践这些建议并不容易,开发人员还是会选择简单解决方案: 复制/粘贴大法。...不可变对象极大简化了并发编程,这是支持使用它重要理由。想想看,为什么编写适当多线程程序是一项艰巨任务?因为同步线程访问资源(对象其他操作系统资源)是很困难为什么同步这些访问很困难?...如果没有公共字段,没有可以更改其内部数据方法,并且派生类方法无法更改其内部数据,那么引用对象类就是不可变。因为值不可变,所以在所有情况下都可以引用相同对象,不需要复制构造函数赋值操作符。...出于这个原因,建议复制构造函数和赋值操作符设为私有,或者从boost::noncopyable继承,或者使用新C++ 11特性“显式默认和删除特殊成员函数”[2]。

    1K10

    Unity基础教程系列——对象管理(二)对象多样化(Fabricating Shapes)

    理想情况下,此字段是只读,因为形状实例始终是一种类型,并且不会更改。但是必须以某种方式为它分配一个值。我们可以私有字段标记为可序列化,并通过每个预制件检查器为其分配一个值。...因此,这是每个实例而不是每个预制件要跟踪东西。 默认情况下,私有字段不会序列化,因此预制与它无关。一个新实例简单地获取该字段默认值,大多数时候是0,因为我们没有给它另一个默认值。...属性实际上需要两个单独代码块。一种获取它表示值,另一种进行设置。这些通过get和set关键字标识。也可以仅使用其中之一,但是现在,我们两个需要。 ? getter部分只是返回私有字段。...为什么不直接使用只读(readonly)属性呢? 只读字段属性只能分配默认值,或在构造函数方法中分配。但不巧是,我们不能在实例化Unity对象时使用构造函数方法。所以只能使用这样方法。...为了保存和加载形状颜色,它必须能够追踪到它。我们不需要提供对颜色公共访问,所以通过SetColor设置一个私有字段就足够了。 ?

    1.8K10

    帮助 Java 开发人员进行 Bean 映射 8 大框架

    Bean 应该是可序列化(即将对象状态转换为字节流),应该有一个公共无参数构造函数,并且属性必须是私有的,具有公共 getter 和 setter 方法。...打包包 ; 公共 类 学生 实现 java.io.Serializable{ 私人 int id; 私有 字符串名称; 公共 学生(){} public void setId( int id...字符串 getName(){返回 名称;} } 现在访问 JavaBean,getter 和 setter 方法使用如下: 打包包 ; 公共 类 测试{ 公共 静态 无效 主要(字符串参数[]){...但是,为每个属性创建 getter 和 setter 方法可能会导致在多个区域重复代码,几乎没有变化,也称为样板。 这就是 bean 映射框架在 项目开发中发挥作用地方。...Java 中用于映射顶级框架 现在您已经知道 Java 中 JavaBean 和 Bean 映射框架是什么以及为什么首先使用它们

    2.3K10

    类类声明引入一个新类型,并定义其字段、方法和构造函数。 ArkTS语法--类

    类可以具有实例字段或者静态字段。实例字段实例字段存在于类每个实例上。每个实例都有自己实例字段集合。要访问实例字段,需要使用类实例。...静态方法属于类本身,只能访问静态字段。静态方法定义了类作为一个整体公共行为。...继承类可以新增定义字段和方法,也可以覆盖其基类定义方法。基类也称为“父类”“超类”。继承类也称为“派生类”“子类”。...= 'b'; // 编译时错误:'y'不可见Protected(保护)protected修饰符作用与private修饰符非常相似,不同点是protected修饰成员允许在派生类中访问,例如:class...this.y = 'b'; // 编译时错误,'y'不可见,因为它是私有的 }}----正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

    21710
    领券