私はhttps://www3.ntu.edu.sgからOOPエクササイズをしています.1つの継承問題を理解することはできません。スーパークラスcircle
とサブクラスcylinder
extends
circle
の2つのクラスがあります。Javaサブクラスはsuper.tostring()を使用しますが、スーパークラスのメソッドは使用しません。どうして?
サークル: - 両方の領域cylinder
領域を印刷
public double getArea() {
return Math.PI*radius*radius;
}
public String toString() {
return "Circle Area: "+this.getArea()";
}
シリンダサークル
@Override
public double getArea() {
// TODO Auto-generated method stub
return super.getArea()*2+super.getCircumference()*height;
}
@Override
public String toString() {
return "Cylinder["+super.toString+"]"+"Cylinder area="+getArea()+"]";
}
Cylinder
クラスから
getArea()
を用い
新しいオブジェクトタイプCylinder
プリントsuper.toString()
を拡張します。どうすればスーパークラス(Circles
)getArea()
をsuper.toString
で使用できますか?
ありがとうございます!
それが基本のJavaのセマンティクス(多型)の違反になりますので、あなたがそれをすることはできません。
回避策は
Circle
クラスをこのように変更することができます。あなたの主な間違いは、 'Cylinder'を' Circle'のサブクラスにすることです。明らかにそうではありません。私は見る。 –それが私が探していた答えです。ありがとう! –
サークルは実際にはシリンダーの特殊ケースで、高さはゼロです。 –