首页
学习
活动
专区
工具
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相对应,用于决定编译器生成gettersetter是否为原子操作,atomic设置成员变量@property属性时...一般情况下希望字符串值跟着变化时,使用copy;希望属性变量跟着变化,就使用strong。 以上情况是针对NSMutableString赋值为NSString时,才会有所不同。...对于只读属性只需提供getter即可。当一个属性被声明为@dynamic var并没有提供gettersetter方法,当执行到需要settergetter方法时,导致崩溃。...若成员已经存在,则不再生成 在protocolcategory中如何使用@property 在两者中,都会生成settergetter方法声明。...重写只读属性getter时; 重写settergetter使用了@dynamic时 @protocol中定义了所有属性时 在category定义了所有属性时 重载了属性时 能否向编译后中添加实例变量

1.1K20

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

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

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

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

    59320

    Lombok超详解及其注解

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

    44900

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

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

    1.4K10

    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 方法放在体最后。

    78321

    iOS_Extension、Category、load、initialize

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

    51400

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

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

    1.9K10

    IDEA 2022 之 Lombok 使用 教程

    对于这些格式固定代码,IDE也提供了自动生成功能,但是无论是自动生成还是纯手动写,这些代码在中是实实在在存在,有时候,看到一个文件很长,其中却都是一些,没有任何技术含量gettersetter...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() 方法定义相应树节点

    31410

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

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

    1.7K90

    Getter & Setter使用还是废弃

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

    1.3K60

    Yii框架gettersetter方法功能与用法分析

    本文实例讲述了Yii框架gettersetter方法功能与用法。分享给大家供大家参考,具体如下: 1.属性 在 PHP 中,成员变量也被称为属性。...为解决该问题,Yii 引入了一个名为 yii\base\Object , 它支持基于 getter setter(读取器设定器)方法来定义属性。...getter/setter 定义属性用法与成员变量一样。两者主要区别是: 当这种属性被读取时,对应 getter 方法将被调用;而当属性被赋值时, 对应 setter 方法就调用。...通过 getter setter 定义属性也有一些特殊规则限制: 这类属性名字是区分大小写,object- label object- Label 是同一个属性。...因为 PHP 方法名是区分大小写。 如果此类属性名成员变量相同,以后者为准。

    96731

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

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

    44260

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

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

    44120

    OC-基础总结(二)

    解决方案: 其中一边不要使用#import引入对方头文件,而是使用@class 名;来标注这是1个,这样就可以在不引入对方头文件情况下,告诉编译器这是1个。...强指针与弱指针 强指针: 默认情况下,声明1个指针,这个指针就是1个强指针。 我们也可以使用__strong来显示声明这是1个强指针。 Person *p1; // 这是1个强指针....指针默认情况下都是1个强指针。 __strong Person *p2; // 这也是1个强指针.使用__strong来显示声明强指针。 弱指针: 使用__weak标识指针就叫做弱指针。...Person *p2 = p1;//p2也是个强指针.p1p2都指向Person对象. //因为我们说过,每1个指针变量默认情况下都是1个强指针变量....所以需要自己写getter setter声明,如果也需要自己定义属性,这个属性就必须在本类中。

    954100
    领券