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

如何在不使用getter和setter的情况下显示另一个类的变量?

在不使用getter和setter的情况下显示另一个类的变量,可以通过以下几种方式实现:

  1. 公共成员变量(Public Member Variables):如果另一个类的变量是公共的(public),则可以直接通过该变量名访问和显示。公共成员变量的优势是简单直接,但缺点是无法对访问进行控制和限制。
  2. 友元类(Friend Class):如果两个类之间有友好关系,可以将一个类声明为另一个类的友元类,从而可以直接访问和显示另一个类的私有成员变量。友元类的优势是可以在一定程度上控制访问权限,但缺点是增加了类之间的耦合性。
  3. 友元函数(Friend Function):类似于友元类,如果两个类之间有友好关系,可以将一个函数声明为另一个类的友元函数,从而可以直接访问和显示另一个类的私有成员变量。友元函数的优势和缺点与友元类类似。
  4. 委托(Delegation):在一个类中创建另一个类的对象,并通过该对象调用其成员变量。这种方式可以间接地显示另一个类的变量,但需要注意对象的生命周期和访问权限。
  5. 继承(Inheritance):如果两个类之间存在继承关系,子类可以直接访问和显示父类的成员变量。这种方式的优势是简单直接,但缺点是增加了类之间的耦合性,并且要求父类的成员变量具有适当的访问权限。

需要注意的是,以上方法都是在不使用getter和setter的情况下显示另一个类的变量,但并不意味着不使用getter和setter是最佳实践。通常情况下,使用getter和setter可以提供更好的封装性和可控性,同时也符合面向对象编程的原则。

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

相关·内容

property属性相关小记

默认情况下为nullable状态,可以赋值为nil atomic:与nonatomic相对应,用于决定编译器生成的getter和setter是否为原子操作,atomic设置成员变量@property属性时...一般情况下,不希望字符串的值跟着变化时,使用copy;希望属性变量跟着变化,就使用strong。 以上情况是针对NSMutableString赋值为NSString时,才会有所不同。...对于只读属性的只需提供getter即可。当一个属性被声明为@dynamic var并没有提供getter和setter方法,当执行到需要setter和getter方法时,导致崩溃。...若成员已经存在,则不再生成 在protocol和category中如何使用@property 在两者中,都会生成setter和getter方法的声明。...重写只读属性的getter时; 重写setter和getter时 使用了@dynamic时 @protocol中定义了所有属性时 在category定义了所有属性时 重载了属性时 能否向编译后的类中添加实例变量

1.1K20

OC知识--成员变量(属性,实例变量)的相关知识

这样写的好处在下边会提到 2. setter和getter方法 我们无法从外界(比如其他类和文件中)直接访问定义在类中的成员变量。...与getter方法的方法名区分开来 可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。...点语法注意 点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法调用 如果没有setter和getter方法,则不能使用点语法 不要在setter与getter方法中使用本属性的点语法...实例变量作用域使用注意事项 在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是protected的 一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有...效率很快,绝大多数情况下使用nonatomic 修饰是否生成getter方法的 readonly 只生成getter方法,不生成setter方法 readwrite 既生成getter,又生成

2.5K60
  • iOS_理解“属性”(property)这一概念

    如:两个库中使用了新旧两份不同的代码,那么运行时就会出现不兼容的现象,其他编程语言都有应对此问题的办法。 ​ 而OC的做法是,把实例变量当做一种存储偏移量所用的“特殊变量”,交由“类对象”保管。...如一个线程循环读数据,另一个线程循环写数据,那么就肯定会出现内存问题,因为这和getter和setter没有关系。...如:当A线程在进行写操作时,另一个线程突然闯入,把尚未修改好的属性值读取出来,这时线程读到的值就是不对的。 因为iOS中使用同步锁的开销较大,会带来性能问题。...,因为传递给setter方法的新值,有时候可能是一个指向NSMutableString类的实例,若此时不拷贝字符串,那么设置完属性后,字符串的值就可能会在对象不知情的情况下遭人更改。...如:UISwitch类中表示“开关”(switch)是否打开的属性就是这样定义的: @property (nonatomic, getter=isOn) BOOL on; setter=XXX:指定“设置方法

    61720

    Lombok超详解及其注解

    和@Getter 作用:为类中的属性提供setter/getter方法位置:类上方或属性上方,在属性上方则为属性生成setter/getter 方法,在类上方表示给该类下的所有属性生成setter/getter...方法 属性:设置setter和getter访问权限//给类下的所有属性添加Setter/Getter@Setter@Getterpublic class User { //给id属性添加Setter...int age; private final String address = null;}看一看该类的结构:注:static修饰的变量不生成getter和setter方法final修饰的变量只生成...getter方法 3.2 @ToString作用:生成toString方法,默认情况下它会按顺序打印类名称以及每个字段。...位置:类上方 属性:exclude:取消某一个或多个变量在toString方法中的显示经过测试确实没有显示 3.3 @EqualsAndHashCode,@NonNull判断两个对象是否相等 在Java

    51700

    使用Project Lombok编写Fat-free java代码

    Java Bean是可序列化的类,它们具有默认的零参数构造函数(也可能是其他版本),并通过getter和setter显示其状态,通常由私有字段支持。。...我们写了很多这些类,,例如在使用JPA或者如JAXB或Jackson等序列化框架时。...这里发生的事情很简单: 使用@Getter和@Setter我指示Lombok为所有属性生成getter和setter。这是因为我在类级别(class)使用了注解。...我会添加一个password属性,但是toString()出于安全原因调用时不希望显示该属性。这是通过排除的参数来实现的@ToString。...另外,我不希望从外部访问 delegated instance,所以我使用  @Getter(AccessLevel.NONE)定制来有效地阻止它的getter方法的创建。

    1.5K10

    Java GetterSetter “防坑指南”

    因此,在这篇文章里,我想深入讨论 Java 中的 getter 和 setter 方法,请跟随我一起来看看吧。 一个简单的例子 下面的代码展示了 Getter/Setter 方法的基本使用。...通过使用 Getter/Setter 方法,变量的访问(get)和更新(set)将变得可控。...Getter/Setter 方法的命名约束 Setter 和 Getter 的命名需要遵循 Java bean 的命名约定,如 setXxx() 和 getXxx(),其中 Xxx 是变量的名称: public...操作符对其进行访问,从而使 setter 和 getter 无效。这种情况的解决方法很简单,直接使用更加“严格”的访问修饰符,例如 protected 和 private。...相反,我们应该找到一些方法,将对象的值赋值到内部成员变量中,比如使用 System.arraycopy() 方法将元素中一个数组复制到另一个数组中。

    1.3K40

    初级程序员需要知道的基本代码规范

    Service 和 DAO 的 getter/setter 方法放在类体最后。...【推荐】setter 方法中,参数名称与类成员变量名称一致,this.成员名 = 参数名。在getter/setter 方法中,不要增加业务逻辑,增加排查问题的难度。...【推荐】final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字: 1) 不允许被继承的类,如:String 类。...2) 不允许修改引用的域对象,如:POJO 类的域变量。 3) 不允许被重写的方法,如:POJO 类的 setter 方法。 4) 不允许运行过程中重新赋值的局部变量。...”下的核心方法;而私有方法外部一般不需要特别关心,是一个黑盒实现;因为承载的信息价值较低,所有 Service 和 DAO 的 getter/setter 方法放在类体最后。

    79721

    iOS_Extension、Category、load、initialize

    (所以尽量不起同名的方法,除非是故意想覆盖) ​ Category中声明的属性,只会生成setter和getter的声明,不会实现setter、getter和成员变量 如: // MOPerson+Fitness.h...可以做一些简单的初始化工作,如:初始化 全局变量 或 静态变量(整个类共用的数据); 五、灵魂拷问 1、Category和Extension是什么?两者的区别?...ivars是指向名为objc_ivar_list的结构体的指针(指向的是一个固定区域,只能修改成员变量值,不能增加成员变量个数);而methodLists是一个指针,它指向另一个指针,另一个指针指向名为...(耦合度) ​ 分类Category: 允许开发者在不改动原有类的情况下,对该类进行扩展使用,是对一个功能完备的类的一种补充; ​ 继承Inherit: 耦合度比较高,依赖父类,要求对父类的工作流程相对熟悉...可以添加属性,只是系统不会自动为Category中的属性实现setter和getter方法;因为不能添加实例变量,所以需要通过runtime动态绑定的方式,实现setter和getter方法。

    53900

    基础篇-ObjectC继承、类别、属性

    对于界面相似度很高的情况下,使用继承可以节省很多代码和设置,只需要在子类中重写父类中的方法,或者增加新的子类方法即可,代码非常的简洁维护起来也很方便。下面小节下相关的知识,供需要的朋友查看。   ...继承的好处: (1)抽取出了重复的代码 (2)建立了类和类之间的联系 继承的缺点:耦合性太强 属性 在OC中定义变量,可以自己来定义变量的setter方法来设置变量值,用getter方法来获取变量值...在声明property属性后,有2种实现选择 @synthesize  作用是实现属性的,如getter,setter方法....和getter,这样,就可以和以前一样调用getter和setter了。...setter和getter的改进优化: 可以看到,getter器的方法名直接就是变量名,方法名和变量名一样,容易让人迷糊,所以,可以这样优化。

    1.9K10

    IDEA 2022 之 Lombok 使用 教程

    对于这些格式固定的的代码,IDE也提供了自动生成的功能,但是无论是自动生成还是纯手动写,这些代码在类中是实实在在的存在,有时候,看到一个类文件很长,其中却都是一些,没有任何技术含量的getter和setter...private String country; } 只需要在类上打 @Getter 和 @Setter 注解。...4.1 Lombok 使用注意 不建议直接使用 @Data 这种大而全的方式覆盖太多的简化场景。 toString 场景不建议使用 Lombok 的,建议使用系统自定义 ToString 里的方法。...5.代码案例: 常用注解:@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。...对第一步骤得到的 AST 进行处理,找到 @Getter @Setter 注解所在类对应的语法树(AST) Lombok 修改该语法树(AST),增加 getter() 和 setter() 方法定义的相应树节点

    40210

    iOS @property探究(一): 基础详解你要知道的@property都在这里

    尽量多的使用属性(property)而不是实例变量(attribute)因为属性(property)相比实例变量有很多的好处: 自动合成getter和setter方法。...当声明一个属性(property)的时候编译器默认情况下会自动生成相关的getter和setter方法 更好的声明一组方法。因为访问方法的命名约定,可以很清晰的看出getter和setter的用处。...@synthesize表示为这两个属性自动生成名为_name和_age的底层实例变量,并自动生成相关的getter和setter也可以不写编译器默认会自动生成'_属性名'的实例变量以及相关的getter...这里所说的编译器自动生成的实例变量就如同我们在上文中手动创建setter和getter时声明的变量_name和_age。...readwrite/readonly readwrite是编译器的默认选项,表示自动生成getter和setter,如果需要getter和setter不写即可。

    1.7K90

    Getter & Setter:使用还是废弃

    私有变量 为什么我们要使用私有的实例变量呢? 因为我们不希望其他类直接的依赖于这些变量。而且在心血来潮时,我们还可以灵活的修改变量类型和实现。...然而,为什么程序员们都自动在对象中加入getter和setter方法,以此对外暴露私有变量,就如同这些变量是公有的一样?...Getter和Setter使得API更加的稳定。 比如,假设类中有一个公共属性,它可以被其他类直接存取。一段时间后,你想要在读取或保存这个公共属性的时候添加额外的逻辑。...我们可以修改这个类,而不用改变任何包外的代码。而且,对于私有嵌套类,改动的范围进一步的被缩小到被嵌套类里。 使用公共属性的另一个例子是JavaSpace 请求对象。...以这种方式使用的Getter和Setter通常破坏了封装性。 一个真正完整封装的类是没有setter方法的,而且最好也没有getter方法。

    1.3K60

    Dart中的封装

    它主要是指将数据(变量)和操作这些数据的方法(函数)组合在一个类中,并对外部隐藏数据的具体实现细节,只通过定义好的公共方法来访问和修改数据。这样可以提高代码的安全性和可维护性。 2....如何在Dart中实现封装 **Dart 不支持 public、private 和 protected 等关键字。Dart 使用  _ (下划线)将属性或方法设为私有。封装发生在库级别,而不是类级别。...使用下划线(_) 将类属性声明为私有。 提供公共的getter 和 setter方法来访问和更新私有属性的值。...Getter和Setter的作用: Getter: 用于安全地获取私有属性的值。 可以包含额外的逻辑,如计算属性。 Setter: 用于安全地设置私有属性的值。...通过使用getter和setter,可以确保类的内部状态始终处于有效和一致的状态,从而提高代码的健壮性。

    7710

    IDEA中用好Lombok,撸码效率至少提升5倍

    任何技术的出现都是为了解决某一类问题,如果在此基础上再建立奇技淫巧,不如回归Java本身,应该保持合理使用而不滥用。...注解的使用 POJO类常用注解: @Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。...@EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode @NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。 ?...@NoArgsConstructor:生成无参构造器; @RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器; @AllArgsConstructor...,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor @Builder:作用于类上,将类转变为建造者模式

    44360

    IDEA 中用好 Lombok,撸码效率至少提升5倍

    任何技术的出现都是为了解决某一类问题,如果在此基础上再建立奇技淫巧,不如回归Java本身,应该保持合理使用而不滥用。...注解的使用 POJO类常用注解: @Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。...@EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode @NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。 ?...@NoArgsConstructor:生成无参构造器; @RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器; @AllArgsConstructor...,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor @Builder:作用于类上,将类转变为建造者模式

    44420
    领券