在Swift中,有人可以解释如何使用从原始属性子类化的另一个对象覆盖超类的属性吗?
举个简单的例子:
class Chassis {}
class RacingChassis : Chassis {}
class Car {
let chassis = Chassis()
}
class RaceCar: Car {
override let chassis = RacingChassis() //Error here
}
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
Cannot override with a stored property 'chassis'
Run Code Online (Sandbox Code Playgroud)
如果我将底盘改为'var',我会收到错误:
Cannot override mutable property 'chassis' of type 'Chassis' with covariant type 'RacingChassis'
Run Code Online (Sandbox Code Playgroud)
我在"覆盖属性"下的指南中唯一能找到的东西表示我们必须覆盖getter和setter,这可能有助于更改属性的值(如果它是'var'),但是如何更改属性类呢?
我有3个班:
public class Alpha {
public Number number;
}
public class Beta extends Alpha {
public String number;
}
public class Gama extends Beta {
public int number;
}
Run Code Online (Sandbox Code Playgroud)
为什么以下代码编译?而且,为什么测试通过没有任何运行时错误?
@Test
public void test() {
final Beta a = new Gama();
a.number = "its a string";
((Alpha) a).number = 13;
((Gama) a).number = 42;
assertEquals("its a string", a.number);
assertEquals(13, ((Alpha) a).number);
assertEquals(42, ((Gama) a).number);
}
Run Code Online (Sandbox Code Playgroud) 从几个初始教程中,我看到属性属于一个类,并且基本上是C++世界中使用的"全局变量"(在此前编码).我还将变量看作更多只在方法中使用/存储信息的"本地"实体.
然后我遇到了这个Quora线程:https://www.quora.com/Apple-Swift-programming-language/What-is-the-difference-between-a-property-and-a-variable 现在我看到属性正在能够执行与其调用相关的代码.这很酷,但也为我打开了一大堆其他问题.
还有其他简单明了的方法来记住属性和变量之间的区别吗?