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(); } }