0
点赞
收藏
分享

微信扫一扫

C#(八):继承


继承

  1. 如果多个类中拥有共同的属性和方法,那么可以提取出公共的属性和方法定义为一个新类,此类即为​​父类(基类/超类)​
  2. 多个具有相同属性和方法的类被称为​​子类(派生类)​
  3. 他们之间的关系是:​​子类 继承 父类​
  4. 特点:
    a. 子类拥有父类的所有字段、属性和方法。
    b. 构造方法不能被继承。
    c. 一个类只能有一个父类,可以拥有多个子类。

示例

定义一个硬件类,包括 CPU 硬盘 内存 显卡 主板 电源 类,他们拥有共同属性为 名称 价格 属性

class MainClass
{
public static void Main(string[] args)
{
CPU cpu = new CPU
{
Name = "CPU"
};
cpu.SetPrice(100d);
Console.WriteLine(cpu.Name); // CPU
Console.WriteLine(cpu.GetPrice()); // 100

GPU gpu = new GPU
{
Name = "GPU"
};
gpu.SetPrice(120d);
Console.WriteLine(gpu.Name); // GPU
Console.WriteLine(gpu.GetPrice()); // 120
}
}

/// <summary>
/// 硬件类 - 父类
/// </summary>
class Hardware
{
public string Name;
private double Price;

public void SetPrice(double price)
{
Price = price;
}

public double GetPrice()
{
return Price;
}
}

/// <summary>
/// CPU 继承 硬件
/// </summary>
class CPU : Hardware { }

/// <summary>
/// 显卡 继承 硬件
/// </summary>
class GPU : Hardware { }

/// <summary>
/// 硬盘 继承 硬件
/// </summary>
class Disk : Hardware { }

/// <summary>
/// 内存 继承 硬件
/// </summary>
class Memory : Hardware { }

/// <summary>
/// 主板 继承 硬件
/// </summary>
class MainBoard : Hardware { }

/// <summary>
/// 电源 继承 硬件
/// </summary>
class PowerSupply : Hardware { }

继承之构造方法

  • 报错代码

Dog dog = new Dog(); // Error 子类在实例化的时候会先实例化父类中的无参构造方法

class Animal {

public string name;

public Animal(string name)
{
this.name = name;
}

}

class Dog : Animal { // Error

public uint age;

}

  • 报错原因:
  • 原因一:​​子类在实例化的时候会先实例化父类中的无参构造方法,因为Animal中无无参构造方法​
  • 解决(方案一):​​父类提供一个无参构造方法​

Dog dog = new Dog();

class Animal {

public string name;

public Animal()
{
}

public Animal(string name)
{
this.name = name;
}

}

class Dog : Animal {

public uint age;

}

  • 原因二:​​子类在实例化的时候会先实例化父类中的构造方法,因为Animal中是有参的构造方法,所以需要在子类构造之前先调用父类中的有参构造方法​
  • 解决(方案二):​​类构造之前先调用父类中的有参构造方法​

Dog dog = new Dog();

class Animal {

public string name;

public Animal(string name)
{
this.name = name;
}

}

class Dog : Animal {

public uint age;

// base(参数) -> 执行Dog构造方法之前先去执行他的父类构造方法
public Dog() : base("")
{
}

}

  • 解决思想:​​想办法让父类实例化的时候合理化(让父类实例化的时候不会报错)​


举报

相关推荐

C#继承实例

c#的继承

八 C#方法

C#学习笔记_继承

C#封装,继承,多态

八股 -- C#

C#学习笔记之继承

C#中的类继承

0 条评论