它是接口类的正确泛化关联吗?
本文关键字:泛化 关联 接口 | 更新日期: 2023-09-27 18:08:07
正如标题所说,我想问这是否是一种好的编程/设计方式。
我得到了一个类,它可以只是一个接口(只有一个抽象方法和几个属性)
作为我的例子,这是类似的:
我们有一个主要类别的车,可能是卡车,汽车,摩托车,…并且有一个抽象方法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();
是对的吗?
你把"抽象"answers"接口"这两个词搞混了。
通过类实现的接口引用类的实例是完全可以的。这里你看到一个接口,ICookieFactory
,它生成了抽象的Cookie
s:
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
方法必须被子类覆盖。
一个类可以实现多个接口,但是只能从一个抽象类继承。
据我所知,是的,创建一个子类将是泛化关联的情况下的接口是可能和正确的。
但在我的情况下,感谢C.Evenhuis的唯一答案,我意识到它会更好地做一个抽象类(所以我可以结合一些抽象方法,子类必须覆盖,与一些具体的方法,孩子可以覆盖或简单地使用)