【问题标题】:Need help for inheriting API in Java在 Java 中继承 API 需要帮助
【发布时间】:2014-03-04 07:57:14
【问题描述】:

我有 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 方法委托给那个方法?
  • 你能简单解释一下吗?我是 Java 中的 OOP 新手。谢谢。

标签: java oop inheritance object-oriented-analysis


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,我想这是我想要的一段代码:)
【解决方案2】:

您可以更改 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){}
}

【讨论】:

    【解决方案3】:

    Java 中没有多重继承,所以Circle 只能扩展Ellipse 或AbstractGraphObject。

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 2010-09-29
      • 2012-02-17
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多