是不是接口的正确泛化关联class

Is it a right generalization association of an interface class

正如标题所说,我想问一下这是否是一个好的 programmation/design 方式。

我得到了一个 class,它可以只是一个接口(只有 1 个抽象方法和几个属性)

以我的案例为例,这类似于:

我们得到了一辆主要的 class 汽车,而不是卡车、汽车、摩托车...... 并且有一个抽象方法 void move()

我可以将 CAR 设计为接口,而将其他具体 class 设计为 CAR class 的泛化吗?或者这是错误的?

public interface Car{
  private int length;
  private float speed;

  public void move();
}

public class truck : Car{
  //Constructor
  public Car(int size)
  {
     length=size;
  }

  public void move()
  {
     //Move code
  }
}

然后

Car myCar = new truck();
myCar.move();

对吗?

您在这里混淆了术语 "abstract" 和 "interface"。

通过它实现的接口来引用 class 的实例是完全没问题的。在这里你看到一个接口,ICookieFactory 烘焙抽象 Cookies:

public interface ICookieFactory 
{
    Cookie BakeCookie(); 
}

public class ChocolateChipCookieFactory : ICookieFactory
{
    public Cookie BakeCookie()
    {
        return new ChocolateChipCookie();
    }
}

public abstract class Cookie
{
    public abstract IEnumerable<Crumb> Crumble();
}

public class ChocolateChipCookie : Cookie
{
    public override IEnumerable<Crumb> Crumble()
    {
        ...
    }
}

ICookieFactory factory = new ChocolateChipCookieFactory();
Cookie cookie = factory.BakeCookie();
foreach (Crumb crumb in cookie.Crumble())
{
    ...
}

接口告​​诉它的实现它必须支持哪些方法或属性,但不能提供任何实现代码本身。您不能在界面中定义字段。

抽象 class 可以包含任意数量的字段和方法,以及 abstract 必须被子 classes 覆盖的方法。

一个class可以实现多个接口,但只能继承一个抽象class。

据我所知,是的,创建一个接口是可能的,也是正确的,child classes 将是泛化关联的一个例子。

但就我而言,多亏了 C.Evenhuis 的唯一答案,我意识到做一个抽象会更好 class(所以我可以结合一些抽象方法 child classes 必须覆盖,一些具体的方法 childs 可以覆盖或简单地使用)。