2017-12-11 8 views
0

私が持っているいくつかの問題について助けを求める必要があります。償いのJava、どうすればいいですか?

"Cuadrilatero"というスーパークラスと "Paralelogramo"というサブクラスを作成する必要があります。

パラレルグラゴはCuadrilateroを拡張しようとしています。 CuadrilateroはXとYの座標を持つ4点を持っています。これは、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は問題ではないtheresの私はコンパイルするときCuadrilateroは、変数P1、P2、P3、P4とXとYとの誤差をshownsコンパイルします「プライベートアクセス有り」

どうすればこの問題を解決できますか?あなたがここにある

+0

[Javaでは、プライベート、パブリック、プロテクト、プライベートの違い](https://stackoverflow.com/questions/215497/in-java-difference-between-package-private-public-protected) - プライベート) – shinjw

+0

@shinjwここでは問題はありません –

+0

'P1'、' P2'などとは何ですか?私はあなたがそれらが2つの座標を持つ "ポイント"であると思いますが、それらを「ダブル」と宣言しました。 2つの実際の値を1つの倍精度で格納することはできません。だから 'getP1'は何を返すのでしょうか?ただ一つの 'double'を返すと宣言したなら、ポイントを返すことはできません。 – ajb

答えて

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

をしかし、他の問題が残っています。そのポイントのインスタンスをさらに仕事のxとyをとり、新しいクラス `ポイントを作成します:P1 or P2あなたの変数を使用すると、

`public double getP1(){ 
    return P1; 
}` 

を言うときにそれが0

可能な修正を返しますdouble型がありますクラス。

0

あなたの質問には、Paralelogramoクラスをコンパイルするときにエラーが発生するということを意味していると思います。そのクラスのコンストラクタの一つ:

public Paralelogramo(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { 
 
    super(P1, P2, P3, P4); 
 
}

この行は、スーパークラスで利用可能な変数を使用しているが、彼らはprivate修飾子を持っているので、それが動作しません。サブクラスによるアクセスを許可するには、アクセス修飾子を使用する必要があります。

0

これまでの回答で明らかになったように、エラーを引き起こす問題は基本クラスのcostructorの呼び出しにあります。 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のcostructor)は、あなたがそれを定義したとして、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); 
    } 

の2番目の定義は、パラメータなしの基本クラスcostructorを呼び出しますが、それは代わりに、それはいくつかの値に属性を初期化する必要があります何もしません。

しかし、私の意見ではエラーが最初のコンセプトである:作ることQuadは、サブクラスParallelogramによって拡張ベースクラスであれば、QuadParallogram beetween共通の属性がサブクラスにこれらにアクセスできるようにprotectedであるべき、としませprivateこれらは、Quadからのみアクセスできます。

関連する問題