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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关·内容

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

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

1.2K10

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.

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

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

    71110

    Getter & Setter:使用还是废弃

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

    1.3K60

    Dart中的封装

    它主要是指将数据(变量)和操作这些数据的方法(函数)组合在一个类中,并对外部隐藏数据的具体实现细节,只通过定义好的公共方法来访问和修改数据。这样可以提高代码的安全性和可维护性。 2....Dart 使用  _ (下划线)将属性或方法设为私有。封装发生在库级别,而不是类级别。 使用下划线(_) 将类属性声明为私有。 提供公共的getter 和 setter方法来访问和更新私有属性的值。...以下是关于Dart中封装、getter和setter的一些关键点: 封装的好处: 数据保护:通过将属性设置为私有,可以防止外部直接访问和修改类的内部状态。...Dart中的封装实现: 使用下划线(_)前缀来标识私有属性或方法。 提供公共的getter和setter方法来控制私有属性的访问和修改。...总结: Getter和Setter是Dart中实现封装的强大工具,它们不仅允许对私有属性进行安全的访问和修改,还能在访问和修改过程中加入额外的逻辑。

    7710

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

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

    78410

    Python类中的属性

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

    18130

    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

    是时候在 Java 中使用方法句柄和变量句柄了,它的效果比反射要好

    然后,可以使用get、set等方法来读取或写入字段的值。...反射为了真正理解 MethodHandles和VarHandles 它们的作用以及为什么有用,首先我们应该了解Java中的反射机制。这对理解句柄是很有帮助的。...为什么我们明明可以直接实例化一个对象、调用其公共方法并访问其公共成员,却还要以编程方式来做这些事情呢?在很多情况下,你实际上无法通过公共方法访问到你需要的内容,因此你必须绕开常规途径。...只有当这些都无法满足需求时,你才应该退回到反射。下面通过一些例子可以帮助理解。我们先从一个反射的例子开始。...直接访问字段现在假设我们之前的类MyClass中有一个name字段,但是没有提供访问器(即getter方法)。我们现在需要一种更强大的方法来访问它,因为我们要直接访问这个私有成员。

    15510

    你了解 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():获取所有字段,包括:私有、受保护、默认

    70150

    深入剖析 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 关键字声明类方法,使其无法被重写。

    25510

    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」 ,我们有时候,需要创建某些参数已经确定的函数

    92920

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

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

    1K10

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

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

    1.8K10
    领券