Inhetirance java,我该怎么做?

时间:2017-12-11 00:33:20

标签: java oop inheritance

我需要帮助你解决我遇到的一些问题。

我需要创建一个名为" 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显示错误。"有私人访问"

我该如何解决这个问题?

3 个答案:

答案 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;
&#13;
&#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扩展的基类,则QuadParallogram之间的共同属性应该是protected要使这些子类可以访问,而private只能从Quad本身访问它们。