Java中的接口是特定的语言构造或关键字. Java有一个关键字接口,用于指示Java类不提供实际的实现,而是描述派生类必须实现的接口. Java编译器会检查这一点,以确保声称实现接口的类为接口提供所有必需的方法.
在Java中,接口关键字表示类提供由指定的接口类描述的一组服务. Java类可以实现多个不同的接口.
在与C讨论中使用word接口的方式有点类似,因为它与类或函数或方法的参数类型有关.但是C中没有interface关键字.单词interface以更通用的描述性方式使用C,如“函数接口需要两个短路和一个长”.它表示函数调用参数及其类型,函数调用者和函数体之间的接口.
因此,将C中的接口视为实现接口的类与使用从类实例化的对象的任何对象之间的一种契约.一个类实际上也可以提供几个不同的相关服务,每个服务都有一个特定的接口.
虚方法的作用是提供一种机制,以便使用类的派生类的对象可以依赖于特定接口,同时将实现的细节留给派生类.所以这类似于Java接口. C虚拟方法是一种使用编译和静态检查方法而不是运行时方法来提供实现Java接口的方法.
使用虚方法,您可以创建一个超类类型,可用于创建可从派生类型中分配变量的指针变量,并且在使用虚方法时,将调用派生类中的正确方法.找出要在编译时完成调用的方法而不是运行时间. C的主要思想是与C一样高效,同时在编译时提供面向对象的语言结构以及静态类型检查,以减少运行时对错误检测的依赖及其额外开销.
class Joe {
public:
virtual int thingOne() { return 1;} // standard, not pure virtual method
..
};
class JoeTwo : public Joe {
public:
int thingOne() { return 2;} // derived class provides its own version of the method
..
};
Joe *myJoe = new JoeTwo;
int i = myJoe->thingOne(); // value of 2 put into i and not value of 1
使用C时,您需要识别对象和指向对象的指针之间的区别,因为对象切片可能在包含派生对象的变量分配给包含派生对象的超类的变量时发生.这个“object slicing”将发生,因为派生对象不适合从中派生它的基类或超类对象.派生对象有额外的东西,超类对象没有这样的赋值(默认赋值是直接内存拷贝)只有派生对象的超类部分被复制到超类对象中.
class Joe {
public:
virtual int thingOne() { return 1;} // standard, not pure virtual method
..
};
class JoeTwo : public Joe {
public:
int thingOne() { return 2;} // derived class provides its own version of the method
..
};
Joe *myJoe = new JoeTwo; // no object slicing since this is pointer
JoeTwo myJoeTwo;
Joe myJoeSliced = myJoeTwo; // JoeTwo object myJoeTwo sliced to fit into Joe object myJoeSliced