我需要帮助你解决我遇到的一些问题。
我需要创建一个名为" Cuadrilatero"的超类。和一个名为" Paralelogramo"的子类。
Paralelogramo将扩展Cuadrilatero。 Cuadrilatero有4分,X和Y的坐标,我需要继承Paralelogramo的子类。
这是代码。
public class Cuadrilatero {
private double P1;
private double P2;
private double P3;
private double P4;
private double x1,x2,x3,x4,y1,y2,y3,y4;
public Cuadrilatero() {
}
public Cuadrilatero(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4){
setP1(x1, y1);
setP2(x2, y2);
setP3(x3, y3);
setP4(x4, y4);
}
//creación de los puntos
public void setP1(double x1, double y1){
this.x1=x1;
this.y1=y1;
}
public double getP1(){
return P1;
}
public void setP2(double x2, double y2){
this.x2=x2;
this.y2=y2;
}
public double getP2(){
return P2;
}
public void setP3(double x3, double y3){
this.x3=x3;
this.y3=y3;
}
public double getP3(){
return P3;
}
public void setP4(double x4, double y4){
this.x4=x4;
this.y4=y4;
}
public double getP4(){
return P4;
}
}
和Paralelogramo类
class Paralelogramo extends Cuadrilatero{
private double altura;
private double base;
public Paralelogramo(){
}
public Paralelogramo(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4){
super(P1,P2,P3,P4);
}
public Paralelogramo(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4,double altura, double base){
setAltura(altura);
setBase(base);
}
public void setAltura(double altura){
this.altura=altura;
}
public double getAltura(){
altura=y2-y1;
return altura;
}
public void setBase(double base){
this.base=base;
}
public double getBase(){
base=x4-x1;
return base;
}
public double getArea(){
double area;
area= getBase() * getAltura();
return area;
}
public String toString(){
return "El area del [Paralelogramo] es: " + getArea() + " cuadrados";
}
}
当我编译Cuadrilatero时,这不是问题,但是当我编译Cuadrilatero时,变量P1,P2,P3,P4以及X和Y显示错误。"有私人访问"
我该如何解决这个问题?
答案 0 :(得分:1)
你在这里遇到的第一个错误:
public Paralelogramo(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4){
super(P1,P2,P3,P4);
}
你应该在上面改为:
public Paralelogramo(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4){
super(x1,y1,x2,y2,x3,y3,x4,y4);
}
public Paralelogramo(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4,double altura, double base){
super(x1,y1,x2,y2,x3,y3,x4,y4);
setAltura(altura);
setBase(base);
}
但还有其他问题。您的变量P1 or P2
的类型为double,所以当您说
`public double getP1(){
return P1;
}`
它将返回0.
可能的解决方法:创建一个新类`Point,它接受一个x和y,然后进一步使用该Point类的实例。
答案 1 :(得分:0)
在您的问题中,我认为您的意思是在编译 Paralelogramo 类时遇到错误。该类的构造函数之一:
import numexpr as ne
out = np.zeros(x.shape)
mask = x <= 10
x_masked = x[mask]
out[mask] = ne.evaluate('sin(x_masked)')
&#13;
这一行使用的是超类中可用的变量,但它们具有私有修饰符,因此无法工作。您需要使用 protected 访问修饰符来允许子类访问。
答案 2 :(得分:0)
由于之前的答案仍然暴露出来,导致错误的问题在于调用基类的构造函数
在Paralelogramo
costructor
public Paralelogramo(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4){
super(P1,P2,P3,P4);
}
问题在于参数的数量:super
(即Quadrilatero的结构函数),正如您所定义的那样,需要8个参数,但是当您调用它时,您只提供4个参数。
Paralogramo
costructor
public Paralelogramo(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4,double altura, double base){
//here there is a hidden call to super() i.e.
//in this case Quadrilatero()
setAltura(altura);
setBase(base);
}
调用没有参数的基类costructor,但是它确实没有,而应该将属性初始化为某些值。
但在我看来,错误在最初的概念中:如果Quad
是由子类Parallelogram
扩展的基类,则Quad
和Parallogram
之间的共同属性应该是protected
要使这些子类可以访问,而private
只能从Quad
本身访问它们。