当前位置: 首页 > 知识库问答 >
问题:

Java-将对象传递到扩展类

白和泽
2023-03-14

假设我有两个公共课,如下所示:

将获取宽度和高度参数的椭圆类。

public class Oval extends Shape{
    OvalClass oval;
    public Oval(int width,int height){
        oval = new OvalClass("first",10);
    }

}

还有一个Shape类,它应该有任何不同的形式(这就是我扩展它的原因)。

public class Shape {

    public void moveLeft(){
      //object?
      object.posX += 1;
  }
}

编辑:

我们对GOval、其他类和move()方法了解不够,因此无法给出一个好的答案。

将另一个OvalClass视为椭圆形类:

public class OvalClass {
    String name;
    int posX;
    public OvalClass(String name, int posx){}
}

问题是,我如何获得在Shape类中的oval中创建的对象oval(GOval-oval)?有更好的方法吗?


共有3个答案

林烨烨
2023-03-14

您是否在考虑重写超类moveLeft()?

public class Oval extends Shape{

        GOval oval;
        public Oval(int width,int height){
            oval = new GOval(0,0,width,height);
        }

        @Override 
        public void moveLeft(){

             if (oval != null)
                oval.move(-1,0);

        }

    }
白信鸿
2023-03-14

左右移动不是只有椭圆形才能做到的,也不是只有正方形才能做到的,每个形状都可以左右移动,因此,Shape应该包含以下功能:

public abstract class Shape {

    int x;
    int y;

    public void moveLeft(){
        this.x = x - 1;
    }

    ...

    abstract double getArea();
}

为了简洁起见,我省略了形状的其他属性。想象一下,它也有一个向上、向下、向右,以及任何你想要所有形状都有的东西。

现在,我们创建一个椭圆形。

public class Oval extends Shape {

    int height;
    int width;

    public Oval(int height, int width, int x, int y) {
        super(x, y);
        this.height = height;
        this.width = width;
    }

    public double getarea() { return Math.PI * width * height; }

}

注意,我们不必告诉椭圆如何向左或向右移动。因为它扩展了形状,所以它已经知道如何左右移动。事实上,我们可以告诉我们的椭圆像这样左右移动:

Oval o = new Oval(1, 1, 0, 0);
o.moveLeft();

维奥拉!我们的Oval可以移动,即使我们没有在Oval类中定义名为moveLeft的方法。这就是继承的美妙之处——我们的Oval继承了moveLeft()方法。

许波涛
2023-03-14

尝试以下操作:

public class Shape {
  // Now all Shapes can move()
  protected abstract void move(int x, int y);
  public void moveLeft(){
    //object?
    move(-1,0);
  }
}

public class Oval extends Shape {
  private GOval oval;
  public Oval(int width,int height) {
    oval = new GOval(0,0,width,height);
  }
  // Implement move()
  protected void move(int x, int y) {
    oval.move(x, y);// or whatever method on GOval makes it move()
  }
}

HTH

 类似资料:
  • 我通过在我的Java类中调用下面的这个方法加载一个AngularJS页面,只是一个示例。如果我有一个对象,例如人,如何发送到角页面?

  • 问题内容: 我正在尝试使用javascript将查询集从Django传递到模板。 我尝试了不同的方法来解决此问题: 1.普通方法-由于命名法[&gt Object:ID&lt,&gt Object:ID&lt,…],Javascript试图解析对象一团糟 Django视图 模板HTML + JS 2. JSON方法-Django无法将对象列表转换为不可序列化的JSON字符串 Django视图 模板

  • 在一个DOM操作练习中,我学习了如何使用纯JavaScript创建HTML元素。也就是像这样的东西: 我必须创建一个函数,允许用户将对象作为参数传入,以设置元素的属性。这个对象包含任意数量的键(属性)和值(属性值)。即属性可以是“src”,值可以是“image.jpg”。类似的东西。用户可以在调用函数时向此对象传递任意多的属性。 附带说明,对代码和JS都很新,请原谅我:P

  • 我想把下面的数组转换成一个稍微修改的对象(见下文)。我也在尝试使用扩展运算符,但还没有弄清楚如何做到这一点。我试图避免使用lodash(用于教育目的)。 null

  • 属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 var foo = 'bar'; var baz = {foo}; baz // {foo: "bar"} // 等同于 var baz = {foo: foo}; 上面代码表明,ES6允许在对象之中,只写属性名,不写属性值。这时,属性值等于属性名所代表的变量。下面是另一个例子。 function f(