-5

正如标题所说,我问这是否是一种好的编程/设计方式。

我有一个类,它可以只是一个接口(只有一个抽象方法和几个属性)

作为我的例子,这是类似的:

我们得到了一个主类 Car,而不是卡车、汽车、摩托车……并且有一个抽象方法 void move()

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

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

会是对的吗?

4

2 回答 2

1

您在这里混淆了“抽象”和“界面”这两个术语。

通过它实现的接口来引用一个类的实例是非常好的。在这里你可以看到一个接口,ICookieFactory它烘焙了 abstract 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())
{
    ...
}

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

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

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

于 2015-08-14T10:21:14.603 回答
0

据我所知,是的,创建一个子类将是泛化关联的情况的接口是可能和正确的。

但在我的情况下,多亏了 C.Evenhuis 的唯一答案,我意识到创建一个抽象类会更好(这样我可以结合一些子类必须覆盖的抽象方法,以及一些子类可以覆盖的具体方法或干脆使用)。

于 2015-08-14T11:33:31.917 回答