正如ttitle所说,我问这是否是一个很好的编程/设计方式。
我有一个类,它可以只是一个接口(只有一个抽象方法和几个属性)
作为我的案例,这是类似的:
我们有一辆大型轿车而不是卡车,汽车,摩托车...... 并有一个抽象方法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();
是不是?
答案 0 :(得分:1)
你在这里混淆了“抽象”和“界面”这两个术语。
通过它实现的接口引用类的实例是完全正确的。在这里,您可以看到一个界面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
方法。
单个类可以实现多个接口,但只能从单个抽象类继承。
答案 1 :(得分:0)
据我所知,是的,创建一个子类可能是泛化关联的接口的可能性和权利。
但在我的情况下,并且由于C.Evenhuis的唯一答案,我意识到创建一个抽象类会更好(所以我可以结合一些子类必须覆盖的抽象方法,并使用一些具体方法孩子可以覆盖或简单地使用)。