为什么我无法从父级的引用变量中调用子类的方法

时间:2017-12-26 18:19:13

标签: c# oop object inheritance

在这里,我可以从子类的实例和父类的引用变量调用父类方法。

public class A
{
    public void showA()
    {
        Console.WriteLine("showA");
    }
}
public class B:A
{
    public void showB()
    {
        Console.WriteLine("showB");
    }
}
public class Program
{
    public static void Main(string[] args)
    {
        A obj = new B();
        obj.showA(); //why I am not able to call obj.showB()
    }
}

1 个答案:

答案 0 :(得分:0)

继承C#的基本构建块。范式可以更容易理解为多态,特别是对于接口。在C#中,您无法从多个类继承,但可以继承多个接口。

要理解这个概念,我们将构建以下内容:

public interface IColor
{
     void WriteColor();
}

上述内容并未实现任何逻辑,它充当意图声明。所以,我们现在将编写我们的课程。

public class Rectangle : IColor
{
     public void WriteColor() => Console.WriteLine("Red");
}

public class Circle : IColor
{
     public void WriteColor() => Console.WriteLine("Blue");
}

实施时,在创建矩形或圆形对象时,可以调用方法WriteColor。但是,尽管你有相同的方法名称,但它们并不相同。这是通过多态性,您的接口允许逻辑分离。所以你有两个完全独立的实现。

另一种形式是直接通过一个类,根据你的继承方式创建不同的术语。

// Object:
public class ShapeColor
{
     private string color;

     public Color(string color) => this.color = color;

     public string Color { get; } = color;
}

我们将创建一个shape对象,以展开示例:

// Shape: Object (Sub Class)
// ShapeColor: Base Object (Base Class)
public class Shape : ShapeColor 
{
     private string shape;   

     public Shape(string shape, string color) : base(color)
     {
          this.shape = shape;
     }

     public string TypeOfShape { get; } = shape;
}

因此,如果调用形状对象,在这种情况下基类需要一种颜色,因此您可以传递形状和颜色。为了进一步扩展,我们现在将创建下一个对象。

public class BuildShape : Shape
{
     public void BuildRectangle()
     {
          var shape = new Shape("Rectangle", "Red");
          Console.WriteLine(shape.TypeOfShape);
          Console.WriteLine(shape.Color);
     }
}

那是什么? BuildShape可以从形状和形状颜色访问我们的属性,为什么?好吧,形状颜色被定义为基类,这意味着我们的形状取决于颜色。当我们从形状继承时,形状的类型被暴露。这是由于以下原因:

  • 形状颜色,我们的基础或超级形状。
  • 塑造形状颜色的子类,但是构建形状的直接超类。

以上代表了我们的继承顺序。如果您感到困惑,我们可以通过解释来简化:

  • 基类:base关键字用于从派生类中访问基类的成员

  • Sub Class&超类:类声明中的可选extends子句指定当前类的直接超类。一个类被认为是它所扩展的类的直接子类。直接超类是从其实现派生当前类的实现的类。

您可以阅读有关here主题的更多信息。