需要帮助继承Java中的API

时间:2014-03-04 07:57:15

标签: java oop inheritance object-oriented-analysis

我有4个这样的课程:

 public abstract class AbstractGraphObject()
 {

       public abstract void draw(Graphics gr,int x,int y);
 }

 public class Line extends AbstractGraphObject()
 {

       public void draw(Graphics gr,int x,int y);
 }

 public class Rectangle extends AbstractGraphObject()
 {

       public void draw(Graphics gr,int x,int y);

 }



 public class Circle extends AbstractGraphObject()
 {

     public void draw(Graphics gr,int x,int y);

 }

已实现类Line和Rectangle。我正在实施Circle类。但是,我发现了一个通常用于绘制椭圆的API。

 public class Ellipse()
 {

     public void paint(Graphics gr,int x,int y);

 }

但是,我无法修改现有类Ellipse的代码,但仍希望重用此类并按照上述设计实现Circle。我该怎么做呢?在这种情况下如何使用OOP?

PS:我必须重用这个Ellipse API。请不要告诉我自己定义Circle。

先谢谢。

3 个答案:

答案 0 :(得分:2)

如果我理解你想要的东西:

 public class Circle extends AbstractGraphObject()
 {
   private Ellipse eclipse;
   public Circle(Ellipse eclipse){
      this.eclipse = eclipse;
   }

   public void draw(Graphics gr,int x,int y){
      eclipse.paint(gr,x,y);
   }
 }

答案 1 :(得分:1)

您可以更改to接口而不是abstract,以便使用上面相同的设计,因为Java不支持多继承,

所以它可能是这样的:

public interface GraphObjectModel()
{
   public abstract void draw(Graphics gr,int x,int y);
}

然后您的班级可以使用GraphObjectModelEllipse API

public class Circle extends Ellipse implements GraphObjectModel
{
    @Override
    public void draw(Graphics gr,int x,int y){ }

    @Override
    public void paint(Graphics gr,int x,int y){}
}

答案 2 :(得分:0)

Java中没有多重继承,因此Circle只能扩展EllipseAbstractGraphObject

如果您真的想要遵循该设计,您可以创建一个包装Circle对象的委托Ellipse类。这意味着它是CircleAbstractGraphObject,而不是Ellipse,但它在内部使用Ellipse来绘制。

我宁愿改变设计的另一种选择。您更改了设计,因此它基于新的GraphObject接口而不是AbstractGraphObject抽象类。您的所有Graph类都将实现它。不再存在超类限制,因此在这种情况下Circle可能会扩展Ellipse。对于GraphObject的剩余部分,如果对您有任何帮助,他们可以选择扩展帮助 AbstractGraphObject基类。