我想创建一个在Java中实现它自己的一些方法的接口(但语言不允许这样做,如下所示):
//Java-style pseudo-code
public interface Square {
//Implement a method in the interface itself
public int getSize(){//this can't be done in Java; can it be done in C++?
//inherited by every class that implements getWidth()
//and getHeight()
return getWidth()*getHeight();
}
public int getHeight();
public int getWidth();
}
//again, this is Java-style psuedocode
public class Square1 implements Square{
//getSize should return this.getWidth()*this.getHeight(), as implemented below
public int getHeight(){
//method body goes here
}
public int getWidth{
//method body goes here
}
}
是否有可能在C ++中创建一个可以实现某些自己的方法的接口?
答案 0 :(得分:7)
使用abstract class
:
public abstract class Square {
public abstract int getHeight();
public abstract int getWidth();
public int getSize() {
return getWidth() * getHeight();
}
}
答案 1 :(得分:5)
是否必须是界面?也许抽象课会更好。
public abstract class Square {
public int getSize() {
return getWidth() * getHeight();
}
//no body in abstract methods
public abstract int getHeight();
public abstract int getWidth();
}
public class Square1 extends Square {
public int getHeight() {
return 1;
}
public int getWidth() {
return 1;
}
}
答案 2 :(得分:1)
要回答您的其他问题,是的,可以通过使用virtual
关键字在C ++中完成。据我所知,它是C ++中多态的主要方法。
This set of tutorials很棒;如果您想了解有关C / C ++的更多信息,我建议您进行可靠的阅读。
答案 3 :(得分:1)
我认为你正在将接口与抽象类混合在一起:
接口描述了所有实施类必须遵守的合同。 它基本上是一个方法列表(重要的是,它们应该返回什么,它们应该如何表现等的文档。
请注意,方法的 NONE 具有正文。接口不这样做。 但是,您可以在接口中定义静态最终常量。
public interface Shape
{
/**
* returns the area of the shape
* throws NullPointerException if either the height or width of the shape is null
*/
int getSize();
/**
* returns the height of the shape
*/
int getHeight();
/**
* returns the width of the shape
*/
int getWidth();
}
抽象类实现了一些方法,但不是全部。 (从技术上讲,抽象类可以实现所有方法,但这不是一个很好的例子)。目的是扩展类将实现抽象方法。
/*
* A quadrilateral is a 4 sided object.
* This object has 4 sides with 90' angles i.e. a Square or a Rectangle
*/
public abstract class Quadrilateral90 implements Shape
{
public int getSize()
{
return getHeight() * getWidth();
}
public abstract int getHeight(); // this line can be omitted
public abstract int getWidth(); // this line can be omitted
}
最后,扩展对象在抽象父类和接口中实现所有剩余的方法。请注意,此处未实现getSize()(尽管您可以根据需要覆盖它)。
/*
* The "implements Shape" part may be redundant here as it is declared in the parent,
* but it aids in readability, especially if you later have to do some refactoring.
*/
public class Square extends Quadrilateral90 implements Shape
{
public int getHeight()
{
// method body goes here
}
public int getWidth()
{
// method body goes here
}
}