2014-03-04 152 views
0

继承API我有4类这样的:需要帮助在Java

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); 

} 

类线条和矩形已经实施。我正在实施Circle类。但是,我发现一个API通常绘制一个椭圆。

public class Ellipse() 
{ 

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

} 

但是我不能修改现有的类椭圆的代码,但还是想重新使用这个类,并实现上面的设计下一个循环。我该怎么做呢?在这种情况下如何使用OOP? PS:我必须重用这个Ellipse API。请不要告诉我自己定义Circle。

谢谢先进。

+2

从'Circle'方法代表该方法? –

+0

你能解释一下吗?我是Java的OOP新手。谢谢。 – xtiger

回答

1

你可以改变的接口,而不是抽象的,以便使用上述相同的设计,ANS因为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

如果我理解正确的话,你想要什么:

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); 
    } 
} 
+0

非常感谢你,我认为这是我想要的一段代码:) – xtiger

0

有一个在Java中没有多重继承这样Circle只能扩展EllipseAbstractGraphObject

如果您确实想遵循该设计,您可以创建一个包含Ellipse对象的代表Circle类。这意味着它是CircleAbstractGraphObject,而不是Ellipse,但它在内部使用Ellipse进行绘制。

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