C#父类子类对象关系

案例:

主要有Vehicle.cs  Airplane.cs   Car.cs  3个类。

Car和Airplane都继承与Vehicle类。Vehicle中Drive为虚方法,可在子类中重写,父类引用子类对象,并在car中重写了Drive方法。

 1  class Vehicle
 2     {
 3         public void StartEngine(string noiseToMakeWhenStaring)
 4         {
 5             Console.WriteLine("starting engine:{0}",noiseToMakeWhenStaring);
 6         }
 7
 8         public void StopEngine(string noiseToMakeWhenStopping)
 9         {
10             Console.WriteLine("stopping engine:{0}",noiseToMakeWhenStopping);
11         }
12
13         public virtual void Drive()
14         {
15             Console.WriteLine("Default Drive method");
16         }
17     }
 1     class Airplane :Vehicle
 2     {
 3         public void Takeoff(){
 4             Console.WriteLine("take off");
 5         }
 6         public void Land()
 7         {
 8             Console.WriteLine("land");
 9         }
10     }
 1     class Car:Vehicle
 2     {
 3         public void SpeedUp()
 4         {
 5             Console.WriteLine("SpeedUp");
 6         }
 7
 8         public void SpeedDown()
 9         {
10             Console.WriteLine("SpeedDown");
11         }
12
13         public override void Drive()//重写父类Drive中的方法
14         {
15             Console.WriteLine("Motoring");
16         }
17     }

Program.cs

 1 using System;
 2
 3 namespace Vehicles
 4 {
 5     class Program
 6     {
 7         static void DoWork()
 8         {
 9             Console.WriteLine("Journey by airplane:");
10             Airplane myplane = new Airplane();
11             myplane.StartEngine("Contact");
12             myplane.Takeoff();
13             myplane.Drive();
14             myplane.Land();
15             myplane.StopEngine("whirr");
16
17             Console.WriteLine("\nJourney by car");
18             Car mycar = new Car();
19             mycar.StartEngine("gogo");
20             mycar.SpeedUp();
21             mycar.Drive();
22             mycar.SpeedDown();
23             mycar.StopEngine("stop");
24
25             Console.WriteLine("\nTest");
26             Vehicle v = mycar;//父类引用子类对象;
27             v.Drive();   //运行为子类中重写的方法
28             v = myplane;
29             v.Drive();
30         }
31
32         static void Main()
33         {
34             try
35             {
36                 DoWork();
37             }
38             catch (Exception ex)
39             {
40                 Console.WriteLine("Exception: {0}", ex.Message);
41             }
42             Console.ReadKey();
43         }
44     }
45 }

注意:

在program中父类可以引用子类对象复制,类的赋值的原则是,子类型可以赋值给父类型,反之需要进行强制转换。在子类中是用override可以重构父类的方法,代码执行过程中,会引用子类中重构的父类方法。

时间: 2024-08-10 15:10:06

C#父类子类对象关系的相关文章

验证当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

结果:当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行.

Java父类子类的对象初始化过程

摘要 Java基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况. 1. 基本初始化过程: 对于一个简单类的初始化过程是: static 修饰的模块(static变量和static 块)  ---> 按照代码顺序依次执行. | 实例变量  及非static模块---> 按照代码顺序依次执行. | 构造函数 ---> 执行对应的构造函数. 子类的初始化过程. 父类static修饰的模块 | 子类static修饰模块 | 父类实例变量和非static块 | 父

java基础入门-父类引用子类对象(2)-抽象类

抽象类:具有抽象方法的类,需要使用abstract关键字修饰 关系图 下面上代码 package com.ray.testobject; /** * 抽象类 * * @author ray * @since 2015-05-02 * @version 1.0 * */ public abstract class Person { public abstract void getDescription(); } package com.ray.testobject; /** * 实现类 * * @

java父类引用指向子类对象

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new Cat(); 即声明的是父类,实际指向的是子类的一个对象. 那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态.动态链接,向上转型 也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的.让你更关

理解多态AND理解父类引用指向子类对象

假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存. 现在通过代码来看看内存的分配情况: Father f = new Father();//系统将分配1M内存. Son s = new Son();//系统将分配1.5M内存. 因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数. 由于s中包含了父类的实例,所以s可以调用父类的方法. Son s1 = s;/

【转】父类引用指向子类对象

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog.其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类. Animal animal = new Cat(); 即声明的是父类,实际指向的是子类的一个对象. 那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态.动态链接,向上转型 也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的.让你更关

C#基础知识—父类和子类的关系

public class ParentClass { public ParentClass() { } public string NamePropety { get; set; } public void GetName() { } } public class ChildClass:ParentClass { public ChildClass() { } public int Age { get; set; } public int GetAge() { return 10; } } Pa

java中父类与子类的关系以及使用

java中父类与子类的关系以及使用 在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类.子类可以通过extends关键字来继承父类.做个比较通俗的比喻,就像一个父亲可以有多个亲孩子,但是一个孩子只能有一个亲生父亲. 1.继承以及重写:子类继承父类是对父类属性和方法的全面继承,同时子类在继承了父类的方法后,可对父类的方法进行重写. public class Son extends Fat{ private int b; private String h1; public void

为什么父类引用可以指向子类对象 子类引用不能指向父类对象 泛型

假设有父类Fu ,其子类为Zi ,从对象的内存角度,假设Fu类里面的变量占内存2M, Zi 类里的变量占内存1M: Fu f = new Fu ();//系统将分配2M内存 Zi z = new Zi ();//系统将分配3M内存(2+1) 因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.所以z可以调用父类的方法. Zi z1= z; //z1指向那3M的内存. Fu f1 = (Fu)z;//这时f1会指向那3M内存中