using System;
public class CPU {
public string model;
public CPU(string model) {
this.model = model;
}
public void Start() {
Console.WriteLine(model + " started");
}
}
public class Intel : CPU {
public bool convertible;
public Intel(string model, bool convertible) : base(model) {
this.convertible = convertible;
}
}
public class AMD : CPU {
public bool sidecar;
public AMD(string model, bool sidecar) : base(model) {
this.sidecar = sidecar;
}
public void PullWheelie() {
Console.WriteLine(model + " pulling a wheelie!");
}
}
class Test {
public static void Main() {
Intel myIntel = new Intel("MR2", true);
// create a AMD object
AMD myAMD = new AMD("V-Rod", true);
// cast myAMD to CPU (upcast)
CPU myCPU2 = (CPU) myAMD;
// cast myCPU2 to AMD (downcast)
AMD myAMD2 = (AMD) myCPU2;
// myMotorCycle2 has access to all members of the AMD class
Console.WriteLine("myAMD2.model = " + myAMD2.model);
Console.WriteLine("myAMD2.sidecar = " + myAMD2.sidecar);
myAMD2.Start();
myAMD2.PullWheelie();
}
}