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

重写的方法可以调用继承的私有getter,但不能调用继承的私有setter

在面向对象编程中,继承是一种重要的概念,它允许子类继承父类的属性和方法。当子类需要对父类的方法进行修改或扩展时,可以通过重写方法来实现。

重写方法是指在子类中定义与父类中同名的方法,从而覆盖父类中的方法实现。在重写方法中,可以调用继承的私有getter方法,但不能调用继承的私有setter方法。

私有getter方法是一种用于获取私有属性值的方法,它通常以get开头,后面跟着属性名。私有setter方法是一种用于设置私有属性值的方法,它通常以set开头,后面跟着属性名。

调用继承的私有getter方法可以帮助子类获取父类中的私有属性值,从而在重写方法中进行进一步的操作。但是,调用继承的私有setter方法可能会导致不可预料的结果,因为私有setter方法通常用于对私有属性进行有效性检查和处理。

总结起来,重写的方法可以调用继承的私有getter方法,以获取父类中的私有属性值,但不能调用继承的私有setter方法,以避免可能的副作用。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

python调用私有属性方法总结

同样为私有属性,有的开发语言中是真私有属性,有的是假私有属性。 例如 :在 OC 开发过程中出现私有属性就是假私有属性,通过 runtime 可以很方便拿到私有属性并进行修改。...__age) 运行模块之后,控制台会打印出: ‘Person’ object has no attribute ‘__age’ 既然 age作为私有属性,所以该属性就不能直接访问。...正确调用方法为: print(obj._Person__age) 控制台就可以打印出:18 同样,可以重新给私有属性赋值 obj._Person__age = 20 print(obj...._Person__age) 控制台就可以打印出:20 如果我们另外创建一个类并继承 Person,该如何访问自己私有属性并做修改呢?..._Person__age) 这个时候,控制台会打印:’Student’ object has no attribute ‘_Person__age’ 这进一步证明了,私有属性是无法被继承

1.9K30

【Groovy】Groovy 方法调用 ( Java 类成员及 settergetter 方法设置 | Groovy 类自动生成成员 gettersetter 方法 )

文章目录 一、Java 类成员及 settergetter 方法设置 二、Groovy 类自动生成成员 gettersetter 方法 一、Java 类成员及 settergetter...方法设置 ---- 创建标准 Java 类 , 需要将成员变量设置为私有成员 , 并且为其定义 gettersetter 方法 ; class Student { private String...gettersetter 方法 ---- 在 Groovy 脚本中创建 Groovy 类 , 在其中定义 2 个成员 ; /** * 创建 Groovy 类 * 在其中定义 2 个成员 */...class Student { def name def age } 在 Groovy 中类中 , 不需要定义成员变量 settergetter 方法 , Groovy 会自动生成相关...字节码文件 , 可以看到系统为 Student 类自动生成了 gettersetter 方法 ; 完整字节码类如下 : // // Source code recreated from

1.1K30
  • Java 反射机制详解:私有方法调用头大?如何通过反射调用类中私有方法

    文章目录 前言 一、私有方法在本类中直接调用 1.1、在本类中实例化,调用私有方法 1.2、尝试在其他类直接调用私有方法(错误示范) 二、使用反射实例化类强制调用私有方法 2.1、使用类加载器加载被调用类...、运行结果 总结 前言 在 Java 中如果我们使用 new 关键字调用构造函数对类进行实例化,我们就可以根据在这个类中修饰符来访问类中定义私有方法。...但是如果需要在其他类调用私有方法,就可以利用 Java 中提供反射来实现。...一、私有方法在本类中直接调用 1.1、在本类中实例化,调用私有方法 说明:被 private 关键字修饰构造方法方法或者数据域只在其所在类中可见。...(); } } 1.2、尝试在其他类直接调用私有方法(错误示范) 如果我们直接在其他类中实例化 Demo 类,来直接调用 demo() 方法,就会发现 IDE 直接产生编译错误,很明显我们直接在另一个类中调用私有方法是行不通

    2.4K21

    调用内部或私有方法N种方法

    非公开类型或者方法被“隐藏”在程序集内部,本就不希望从外部访问,但是有时候调用一个内部或者私有方法可能是唯一“救命稻草”,这篇文章列出了几种具体实现方式。...但是我们都知道反射是一种并不高效方式,对于需要频繁调用,我们一般不推荐使用。...由于返回值实际上是通过InternalValue属性Get方法获得,而表示方法MethodInfo类型具有一个CreateDelegate方法,我们可以采用如下方式利用InternalValue...在如下代码中,我们创建了一个DynamicMethod类型表示动态方法,以IL Emit方式利用IL指令Call完成了针对InternalValue属性Get方法调用。...(calli) 了解IL朋友应该知道,方法调用涉及IL治理有三个(Call、Callvir和Calli)。

    20020

    编码篇-继承+通知看方法实现和delloc方法调用

    Paste_Image.png UITableViewCell B在初始化时候调用了 UITableViewCell A中初始化方法,所以由于继承机制,实际上 UITableViewCell B注册了两个通知...由于方法B和方法A是一样,所以UITableViewCell B中通知A调用方法A时候,实际上就调用方法B,(当子类方法列表中有和父类方法列表中方法一样情况下,会调用子类中方法,而不调用父类中方法...,也就是重写),而实际上 UITableViewCell B 中方法B设计上不是为 通知A服务,其中调用一些未知数据,所有就出现了崩溃。...ARC下,控制器在被pop后移出栈后会被释放,但有些时候会发现控制器出栈时候不会调用dealloc方法,系统可以帮我们释放该对象,及其包含对象;但是却无法释放不属于该对象一些东西,就造成了 对象...而且重写方法不能显式调用[super dealloc],和继承中先加载父类再加载子类相反,注销时先注销子类之后再注销父类。因为系统会自动帮你调用父类dealloc方法

    80420

    Python类中公开方法私有方法和特殊方法继承原理

    在Python中,对象私有成员在类外部、派生类或程序中无法直接访问,但是可以通过“对象名._类名__私有成员名”这样一种特殊形式来访问。...基类构造方法和公开方法可以在类外部直接访问,也可以被派生类继承。 在访问对象成员时,如果不存在则按照派生顺序逆序查找其基类中是否存在该成员,如果都不存在则抛出异常。...B') #覆盖了继承自A类公开方法public def public(self): print('public() method in B') #自动调用基类A构造方法 >>> b = B...', '__class__', ...] >>> class C(A): #显式定义构造函数 def __init__(self): #这里调用是类C私有方法...另外,Python中类还有大量特殊方法,详见Python对象特殊方法及其用法演示,在创建派生类时,基类中已经实现特殊方法可以被派生类继承

    2K50

    没想到吧,PHP 中在类外部也可以调用私有方法

    一般来说,在 Class 外部是无法调用私有方法,这也是 Private 字面的意思,但是一些很特殊很特殊情况下,如果需要调用,是否可以呢?其实可以使用类反射来实现。...reflection->getClosure($object); } return call_user_func_array($callback, $args); } 简单解释一下,首先还是简单判断该方法是否存在...,接着获取对象方法放射,然后判断一下是不是公共方法,如果是公共就正常调用,不是则获取其闭包,最后使用回调方式来调用。...这个函数可以让你调用对象私有或者受保护方法,建议一些特殊情况下才使用。为了方便大家调用,新版 WPJAM Basic 也会集成该函数。----

    1K30

    探索 Java 隐藏开销--私有方法调用莫瞎写

    我在源文件里面没有任何方法,所以看起来可以这么说。 当然,这样答案真的没有什么意思。...这是因为,即使我们不声明它,Example 也是继承于 Object 。 每一个构造函数都会调用父类构造函数。 它是自动插入。这意味着我们 class 流中有两个方法。...,但是,这在我们假设独立系统里面是如何工作呢,这里我们ItemsAdapter类需要引用ItemsView私有方法?...,它做事情就是调用我们原来displayText方法。...这有意义,因为我们需要一个从包作用域到类里调用私有方法途径。 Java 会合成一个包作用域方法来帮助实现这个函数调用

    64320

    objective-C OOP(上)--类定义、继承方法调用

    上一篇展示了如何用传统“面向过程编程方法”,实现画“矩形”、“圆”、“椭圆”,这一篇看下如何改用OOP方法来实现: 因为要用到“颜色”以及“矩形区域”二个枚举,先把他们抽出来单独放在CommDef.h...,用来申明类有哪些成员(也称为类定义文件,类似于接口),另一部分是".m"文件,用来提供具体实现 Shape类申明部分如下:(Shape.h) // // Shape.h // HelloWorld...bounds.x,bounds.y,bounds.width,bounds.height,[super getColorName:fillColor]); } @end 注:上面展示了在obj-C中如何调用父类方法...%d) in %@",bounds.x,bounds.y,bounds.width,bounds.height,[super getColorName:fillColor]); } @end 最后看下调用主函数...,在obj-C中id相当于“任意类型”,意为指向某对象指针(哪怕你不知道这个对象是什么类型),总之,如果你不知道某对象具体类型时,用它就对了。

    1.2K80

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

    对于界面相似度很高情况下,使用继承可以节省很多代码和设置,只需要在子类中重写父类中方法,或者增加新子类方法即可,代码非常简洁维护起来也很方便。下面小节下相关知识,供需要朋友查看。   ...这里说方法需要在 父类中 .h中声明,子类才可以使用super 调用父类方法可以继承过来父类一切属性,可以使用父类成员变量。...在继承中需要注意是:重写这个方法在父类中执行时会替换掉原来方法(就算子类中没有调用这个新重写方法,这个新方法也已经被执行了),一般自己不调用这个重写方法,子类一般只调用新加方法。  ...1)新扩展方法与原方法同名,但是还需要使用父类实现。因为使用类别,会覆盖原类实现(继承也会覆盖,就是所谓重写,但是可以重写时候调用  父类同名方法,而类别不能),无法访问到原来方法。...继承好处: (1)抽取出了重复代码 (2)建立了类和类之间联系 继承缺点:耦合性太强 属性 在OC中定义变量,可以自己来定义变量setter方法来设置变量值,用getter方法来获取变量值

    1.8K10

    使用 Java 中反射机制调用类中私有方法原理详解

    文章目录 前言 一、私有方法在本类中直接调用 1、在本类中实例化,调用私有方法 2、尝试在其他类直接调用私有方法(错误示范) 二、使用反射机制实例化类强制调用私有方法 1、使用类加载器加载被调用类 2...args[]);返回对象 三、完整实现代码、运行结果及总结 总结 ---- 前言 在 Java 中如果我们使用 new 关键字调用构造函数对类进行实例化,我们就可以根据在这个类中修饰符来访问类中定义私有方法...但是如果需要在其他类调用私有方法,就可以利用 Java 中提供反射来实现。 ?...---- 一、私有方法在本类中直接调用 1、在本类中实例化,调用私有方法 说明:被 private 关键字修饰构造方法方法或者数据域只在其所在类中可见。...2、尝试在其他类直接调用私有方法(错误示范) 如果我们直接在其他类中实例化Demo类,来直接调用demo()方法,就会发现 IDE 直接产生编译错误,很明显我们直接在另一个类中调用私有方法是行不通

    3.9K31

    Java面向对象三大特征以及理解

    把属性定义为私有的,它们通过settergetter方法来对属性值进行设定和获取。...private私有的,通过settergetter方法对这些变量进行设值以及取值。...2.继承 Java中继承是指在一个现有类(父类)基础上在构建一个新类(子类),子类可以拥有父类成员变量以及成员方法(但是不一定能访问或调用,例如父类中private私有的成员变量以及方法不能访问和调用...继承作用就是能提高代码复用性。子类拥有父类中一切(拥有不一定能使用),它可以访问和使用父类中私有成员变量,以及重写父类中私有成员方法。...方法重写,子类重写父类中方法(包括接口实现),父类引用不仅可以指向父类对象,而且还可以指向子类对象。当父类引用指向子类引用时,只有在运行时才能确定调用哪个方法

    43440

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

    点语法注意 点语法本质是方法调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应方法调用 如果没有settergetter方法,则不能使用点语法 不要在settergetter方法中使用本属性点语法...变量修饰符继承和在子类中访问 修饰符 类别 能否继承 在子类中访问 @private 私有成员 能被继承 不能被外部方法访问 @public 共有成员 能被继承 不能被外部方法访问 @protected...保护成员 能被继承 不能被外部方法访问 3....如果想对传入数据进行过滤,那么我们就必须重写getter/setter方法 如果不想对传入数据进行过滤,仅仅是提供一个方法给外界操作成员变量,那么就可以使用@property 如果重写setter..._开头成员变量(报错) 如果利用@property来生成getter/setter方法,那么我们可以不写成员变量, 系统会自动给我们生成一个_开头成员变量 @property自动帮我们生成成员变量是一个私有的成员变量

    2.5K60

    java面向对象三大特性

    2.封装实现 需要修改属性访问控制符(修改为private); 创建getter/setter方法(用于属性读写); 在getter/setter方法中加入属性控制语句(用于判断属性值合法性);...这个公共类就是父类,也称为超类或者基类,其他类就是子类。子类可以直接访问父类私有化成员变量,访问父类私有化成员变量可以使用super.get() 方法。...但是可以继承多层子类(不建议继承超过3层) (3)子类继承父类,但是对父类成员变量是无法直接操作,只能通过父类继承过来settergetter方法. 3....对于父类非私有的属性,子类对象可以直接调用。 三、 多态 含义:多态指的是对象多种形态。 多态有两种:引用多态和方法多态。继承是多态实现基础。...多态存在前提(多态三要素) 必须有子类和父类,具有继承或实现(继承) 子类必须重写父类方法重写) 父类引用变量指向子类对象(向上转型) 多态优点 可替换性,多态对一存在代码具有可替代性

    40910

    OC-基础总结(一)

    可以使用self 也可以使用 super 类方法可以被子类继承。子类可以直接调用父类方法。 super只能用来调用父类对象方法或者类方法不能用来访问属性。...将生成私有属性值返回 希望@synthesize 不要生成私有属性,setter getter 实现中操作我们已经写好属性就可以了。...自动生成这个属性 setter getter方法声明和实现。直接将参数值赋值给自动生成私有属性,直接返回生成私有属性值。...@property生成set get方法和成员属性,但是如果同时重写setter getter方法,那么就不会自动生成私有属性了。需要自己写。...父类property一样可以被子类继承,但是生成属性是私有的,可以通过setter getter方法来访问 动态类型和静态类型 OC是一门弱语言,编译器在编译时候,语法检查时候没有那么严格。

    1.2K110

    Python OOP 面向对象编程

    私有继承: 子类能够继承只是父类公开内容,但是不包括父类私有内容。 如果要访问的话也可以,但是需要间接调用父类再用方法调用私有内容。...多继承 Python中,子类是可以同时有多个父类:也就是能够同时继承多个父类所有属性、方法。...多态前提是能够继承父类方法,且能够重写改写父类方法。...但是,不同的人调用是不同do_work。 Father调用自己do_work,儿子因为自己重写了do_work,所以调用自己方法。...注意: 其中@property, @*.setter, @*.deleter,这是固定名字,不能改。 三种操作所修饰三个函数,必须都是同一个名字:即“类属性”名。

    57210

    Java类三大特性总结

    ---- 2.封装实现 2.1 需要修改属性访问控制符(修改为private); 2.2 创建getter/setter方法(用于属性读写); 2.3 在getter/setter方法中加入属性控制语句...这个公共类就是父类,也称为超类或者基类,其他类就是子类。子类可以直接访问父类私有化成员变量,访问父类私有化成员变量可以使用super.get()方法。...但是可以继承多层子类(不建议继承超过3层) (3)子类继承父类,但是对父类成员变量是无法直接操作,只能通过父类继承过来settergetter方法. 3....对于父类非私有的属性,子类对象可以直接调用。 ---- 三、 多态 含义:多态指的是对象多种形态。 多态有两种:引用多态和方法多态。继承是多态实现基础。...多态存在前提(多态三要素) A.必须有子类和父类,具有继承或实现(继承) B.子类必须重写父类方法重写) C.父类引用变量指向子类对象(向上转型) 2.

    40520

    一日一技:在Python中双下划线私有方法不能调用原理

    这是因为,在Python里面,类方法或者属性如果以双下划线开头,那么他们就是类私有方法,在被继承时候,即使子类有相同名字以双下划线开头属性或者方法也不会覆盖父类。...而且这些以双下划线开头私有方法或者属性,在类内部可以自由被其他方法调用,但是在实例对象里面是不能直接调用,如下图所示: 那么Python是如何实现这一点呢?...Python仅仅是改了一个名字,在这种双下划线私有方法或者私有属性前面加上了 _类名,这样就确保了子类和父类方法名不一致。...所以,虽然 在规范上,这种双下划线私有方法私有属性是不应该在外部访问,但是如果你想强行访问,可以个使用这种改名以后名字: kingname = PeopleInfo() kingname...._PeopleInfo__calc_age() # 强行调用子类私有方法 kingname._Info__calc_age() # 强行调用父类私有方法 运行效果如下图所示: ?

    1.6K30
    领券