我有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。
先谢谢。
答案 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);
}
然后您的班级可以使用GraphObjectModel
和Ellipse
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
只能扩展Ellipse
或AbstractGraphObject
。
如果您真的想要遵循该设计,您可以创建一个包装Circle
对象的委托Ellipse
类。这意味着它是Circle
和AbstractGraphObject
,而不是Ellipse
,但它在内部使用Ellipse
来绘制。
我宁愿改变设计的另一种选择。您更改了设计,因此它基于新的GraphObject
接口而不是AbstractGraphObject
抽象类。您的所有Graph类都将实现它。不再存在超类限制,因此在这种情况下Circle
可能会扩展Ellipse
。对于GraphObject
的剩余部分,如果对您有任何帮助,他们可以选择扩展帮助 AbstractGraphObject
基类。