初学者请教一习题,请各位高手解答,谢谢!

时间:2021-10-14 08:46:29
    创建一个成为Vec的接口,这个接口定义了将两个向量相加的方法vecAdd(参数)和相减的方法vecSubtract(参数),创建两个类Vec2D和Vec3D,分别为二维向量和三维向量实现这个接口。类Vec2D必须定义实例变量x和y。类Vec3D必须定义实例变量x、y和z。要求当调用接口方法时能正确的多态调用相应的类方法,而且希望接口的两个方法也能返回相应的类类型。
    比如创建实例Vec vec = new Vec2D(参数),当我调用vec.vecAdd(参数)时能自动多态调用Vec2D的vecAdd(参数)方法,并且方法返回类型是Vec2D
    请教怎么实现?
    

7 个解决方案

#1


lz还是自己尝试解决,遇到具体问题再问吧

#2


我是初学者,我真的不知道应该怎么去实现,比如我定义接口的时候
public interface Vec{
    Object vecAdd(Object o1,Object O2);
    Object vecSubtract(Object o1,Object O2);
}

我就不知道vecAdd和vecSubtract的参数类型和返回类型应该用什么,难道要用Object吗?

#3


interface Vec{
   Vec vecAdd(Vec vec);
   Vec vecSubstract(Vec vec);
}
class Vec2D implements Vec{
 int x,y;
 Vec(){}
 Vec(int x,int y){
   this.x = x;
   this.y = y;
 }
 Vec vecAdd(Vec vec){
  // 保证传进来的是Vec2D的实例
  Vec2D v = (Vec2D)vec;
  return new Vec2D(this.x+v.x,this.y+v.y);
 }
 Vec vecSubstract(参数){
  Vec2D v = (Vec2D)vec;
  return new Vec2D(this.x-v.x,this.y-v.y);
 } 
}

class Vec3D implements Vec{
 int x,y,z;
    // 类似Vec2D 的定义
}

class Test{
 public static void main(String[] args){
   Vec v = new Vec2D(1,2);
   Vec v_ = new Vec2D(3,4);
   v = v.vecAdd(v_); // 调用的即是Vec2D的vecAdd()方法
 }
}

~~LZ的题目意思是不是这个~~关于参数和返回值类型都没有说明的。。。

#4


接口应该是

public interface Vec {
Vec vecAdd(Vec o);
Vec vecSubtract(Vec o);
}

应为你要操作和返回的都是Vec的实现

#5


引用 2 楼 luyue81813 的回复:
我是初学者,我真的不知道应该怎么去实现,比如我定义接口的时候 
public interface Vec{ 
    Object vecAdd(Object o1,Object O2); 
    Object vecSubtract(Object o1,Object O2); 


我就不知道vecAdd和vecSubtract的参数类型和返回类型应该用什么,难道要用Object吗?


看你需要的类型了,需要传什么类型的参数给函数,然后返回什么样的类型出结果。

#6


Vec2D的构造器名写错了-_-!

#7


对,谢谢了,3楼的写的很详细,非常感谢,同时也感谢4楼的,去结贴了

#1


lz还是自己尝试解决,遇到具体问题再问吧

#2


我是初学者,我真的不知道应该怎么去实现,比如我定义接口的时候
public interface Vec{
    Object vecAdd(Object o1,Object O2);
    Object vecSubtract(Object o1,Object O2);
}

我就不知道vecAdd和vecSubtract的参数类型和返回类型应该用什么,难道要用Object吗?

#3


interface Vec{
   Vec vecAdd(Vec vec);
   Vec vecSubstract(Vec vec);
}
class Vec2D implements Vec{
 int x,y;
 Vec(){}
 Vec(int x,int y){
   this.x = x;
   this.y = y;
 }
 Vec vecAdd(Vec vec){
  // 保证传进来的是Vec2D的实例
  Vec2D v = (Vec2D)vec;
  return new Vec2D(this.x+v.x,this.y+v.y);
 }
 Vec vecSubstract(参数){
  Vec2D v = (Vec2D)vec;
  return new Vec2D(this.x-v.x,this.y-v.y);
 } 
}

class Vec3D implements Vec{
 int x,y,z;
    // 类似Vec2D 的定义
}

class Test{
 public static void main(String[] args){
   Vec v = new Vec2D(1,2);
   Vec v_ = new Vec2D(3,4);
   v = v.vecAdd(v_); // 调用的即是Vec2D的vecAdd()方法
 }
}

~~LZ的题目意思是不是这个~~关于参数和返回值类型都没有说明的。。。

#4


接口应该是

public interface Vec {
Vec vecAdd(Vec o);
Vec vecSubtract(Vec o);
}

应为你要操作和返回的都是Vec的实现

#5


引用 2 楼 luyue81813 的回复:
我是初学者,我真的不知道应该怎么去实现,比如我定义接口的时候 
public interface Vec{ 
    Object vecAdd(Object o1,Object O2); 
    Object vecSubtract(Object o1,Object O2); 


我就不知道vecAdd和vecSubtract的参数类型和返回类型应该用什么,难道要用Object吗?


看你需要的类型了,需要传什么类型的参数给函数,然后返回什么样的类型出结果。

#6


Vec2D的构造器名写错了-_-!

#7


对,谢谢了,3楼的写的很详细,非常感谢,同时也感谢4楼的,去结贴了