发布于 2010-09-03 12:18:26
当我们创建接口时,我们基本上是在创建一组方法,而没有任何实现必须被实现的类覆盖。其优点是它提供了一种使类成为两个类的一部分的方法:一个来自继承层次结构,另一个来自接口。
创建抽象类时,我们创建的基类可能包含一个或多个已完成的方法,但至少有一个或多个方法未完成并声明为抽象。如果抽象类的所有方法都未完成,那么它与接口相同。抽象类的目的是为一组派生类的工作方式提供基类定义,然后允许程序员在派生类中填充实现。
发布于 2010-09-03 12:28:08
试着这样想:
抽象类创建"is-a“关系。大众汽车是一辆汽车。
一个接口创建一个“可以做”的关系。弗雷德可以IDrive。
此外,弗雷德可以IDrive,但弗雷德是一个人。
发布于 2010-09-03 12:18:06
抽象类可能包含一些抽象方法和一些非抽象方法。他们做的东西(有相关的代码)。如果一个新的非抽象类,子类它必须实现抽象方法的抽象类。
也就是。
public abstract class A {
public string sayHi() { return "hi"; } // a method with code in it
public abstract string sayHello(); // no implementation
}
public class B
: A
{
// must implement, since it is not abstract
public override string sayHello() { return "Hello from B"; }
}接口更像是一个协议。实现该接口的类必须具有的方法列表。但是他们什么都不做。他们只有方法原型。
public interface A
{
string sayHi(); // no implementation (code) allowed
string sayHello(); // no implementation (code) allowed
}
public class B
: A
{
// must implement both methods
string sayHi() { return "hi"; }
string sayHello() { return "hello"; }
}由于C++中没有协议/接口,所以两者都经常被混淆。因此,用该语言模拟接口行为的方法是编写一个纯虚拟类(一个只有纯虚拟函数的类)。
class A {
virtual int a() = 0; // pure virtual function (no implementation)
} https://stackoverflow.com/questions/3635589
复制相似问题