@Property补充(重写父类Property)

最近在做项目是发现了一个关于@property的问题,因为需求子类有个和父类一样的属性,然后问题就出现了。

于是博主就新建了个项目来测试这个问题。看图↓

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TestClass1继承NSobject,TestClass2继承TestClass1,有个共同的属性name。

如果是这样直接设置或者访问TC2的name属性是没什么问题的,继续看图↓

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

读者可能会觉得很奇怪吧,查阅资料发现,原来在子类重写(可能用重写来说有些不当)父类的属性,编译器不会合成带下划线的属性,则需要自己手动合成setter和getter,否则这个属性将由父类实现,这时候应该明白上图的原因了吧(Understand?)。

因为我在TC1(TC2的父类)手写了set方法

总结:当我们需要在子类重写(可能用重写来说有些不当)父类的属性的时候,最好是在子类手写set和get方法,不然你可以试试哦←_←

PS:听说这种情况在Xcode7下会有警告

时间: 2024-07-29 09:42:31

@Property补充(重写父类Property)的相关文章

2019年10月2日 property补充

描述符:是很多高级库和框架的重要工具之一,描述符通常是使用到装饰器或者元类的大型框架中的一个组件.\ # class ClassMethod: # def __init__(self,func): # self.func=func # # def __get__(self, instance, owner): #类来调用,instance为None,owner为类本身,实例来调用,instance为实例,owner为类本身, # def feedback(): # print('在这里可以加功能

关于继承时子类重写父类方法和覆盖父类变量的若干问题

假设,子类重载父类的方法,并将子类的成员覆盖. 创建子类对象实例,将其上转型成父类. 例子1 public class Parent { public void init() { System.out.println("1 init parent"); this.demo(); } public void demo() { System.out.println("2 demo parent"); } } public class Son extends Parent

java 中继承时子类——重写父类方法

1. 普通类继承,并非一定要重写父类方法.2. 抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法.如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法.3. 接口类继承.如果是一个子接口,可以扩展父接口的方法:如果是一个子抽象类,可以部分或全部实现父接口的方法:如果子类不是抽象类,则要求子类一定要实现父接口中定义的所有方法. 接口中的方法默认的是public abstract 1 package com.hh.Object; 2 3 public class Interface

java 子类重写父类的方法应注意的问题

若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! A.重写规则之一:    重写方法不能比被重写方法限制有更严格的访问级别.(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限.) 比如:Object类有个toString()方法,开始重写这个方法的时候我们总容易忘记public修饰符,编译器当然不会放过任何教训我们 的机会.出错的原因就是:没有加任何访问修饰符的方法具有包访问权限,包访问权限比public当然要严格了,所以编译器会报错的. 反正子类

解决重写父类的方法且不会影响继承的子类的问题

基类的方法被所有继承的子类继承,是不应该被修改的,如果继承的子类重写了基类的方法,那么,再从这个子类派生出子类的话,这个派生的子类接口已经破坏掉了统一的接口. 但有时候,我们需要一个子类能扩展基类的方法,但又不想破坏这个统一的接口,这时候,哥就来教你既能扩展功能,又能保证接口的统一性:) 首先做几个实验验证: 提供的源码如下: A类  B类  C类  (B类继承于A类,C类继承于B类) // // A.h // Super // // Copyright (c) 2014年 Y.X. All r

java中子类重写父类方法的思想本质

java语言中,在子类中定义与父类同返同名同参的方法将会出现"重写(覆写)",子类将屏蔽父类的相同方法,调用子类的方法将不会调用到父类的该方法. 许多初学者也许会被"覆写"一词迷惑,以为覆盖掉了父类的方法,其实这两种方法是同时独立存在的,只是子父类调用该方法的入口不一样,彼此互不干扰. 1 /* 2 需求:设计一个简单的java程序,证明子类重写父类方法的过程 3 思路: 1.创建父类对象,通过父类对象调用该方法 4 2.创建子类对象,通过父类对象调用该方法 5 3

子类重写父类的方法应注意的问题

若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! 重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别. (但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限.) 比如:Object类有个toString()方法,开始重写这个方法的时候我们总容易忘记public修饰符,编译器当然不会放过任何教训我们 的机会.出错的原因就是:没有加任何访问修饰符的方法具有包访问权限,包访问权限比public当然要严格了,所以编译器会报错的. 重写规则之二: 参

加深Java重写父类方法的理解

1.关于子类方法重写父类方法遵循“两同两小一大”的规则 两同:(1)方法名 (2)形参列表 两小:(1)子类返回值类型比父类更小或相等 (2)子类声明抛出的异常应比父类小或者相等 一大:(1)子类权限比父类大或相等 上述的规则都很容易理解: 需要注意的是:如何理解子类返回类型比父类更小或相等. 相信很多新手跟我一样,会理解成int范围比long范围小,那么是否可以重写父类方法时,把原来的父类方法返回值long改为int呢? 答案是:不可以. 原因:返回值类型比父类的要小,返回值类型一定是有父子关

面向对象_05【类的继承:extends、重写父类】

类的继承:现有类的基础上构建一个新的类,构建出来的类被称作子类,子类可继承父类的属性和方法. 什么时候定义继承?当类与类之间存在着所属关系的时候,就定义继承.xxx是yyy中的一种==>xxx extends yyy 继承好处: 1,提高代码复用性 2,让类与类之间产生关系,给多态提供前提 单继承:一个子类只能有一个直接父类.多继承:一个子类可以有多个直接父类(Java中不允许,进行改良) ==>不直接继承,因为多个父类中有相同成员,会产生调用的不确定性 在Java是通过"多实现&q