创建一个实现其自身方法的接口

时间:2012-06-08 00:11:15

标签: java interface text-files

我想创建一个在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 ++中创建一个可以实现某些自己的方法的接口?

4 个答案:

答案 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
  }
}