是不是接口的正确泛化关联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
烘焙抽象 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())
{
...
}
接口告诉它的实现它必须支持哪些方法或属性,但不能提供任何实现代码本身。您不能在界面中定义字段。
抽象 class 可以包含任意数量的字段和方法,以及 abstract
必须被子 classes 覆盖的方法。
一个class可以实现多个接口,但只能继承一个抽象class。
据我所知,是的,创建一个接口是可能的,也是正确的,child classes 将是泛化关联的一个例子。
但就我而言,多亏了 C.Evenhuis 的唯一答案,我意识到做一个抽象会更好 class(所以我可以结合一些抽象方法 child classes 必须覆盖,一些具体的方法 childs 可以覆盖或简单地使用)。
正如标题所说,我想问一下这是否是一个好的 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
烘焙抽象 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())
{
...
}
接口告诉它的实现它必须支持哪些方法或属性,但不能提供任何实现代码本身。您不能在界面中定义字段。
抽象 class 可以包含任意数量的字段和方法,以及 abstract
必须被子 classes 覆盖的方法。
一个class可以实现多个接口,但只能继承一个抽象class。
据我所知,是的,创建一个接口是可能的,也是正确的,child classes 将是泛化关联的一个例子。
但就我而言,多亏了 C.Evenhuis 的唯一答案,我意识到做一个抽象会更好 class(所以我可以结合一些抽象方法 child classes 必须覆盖,一些具体的方法 childs 可以覆盖或简单地使用)。