lob*_*ter 0 java inheritance abstract
首先,应该从类GeoObjects继承一个类矩形。其次,应从类矩形继承类广场。
给出了抽象类GeoObjects。
abstract class GeoObjects{
public abstract double Perimeter();
public abstract double Surface();
public static void main (String [] argv){
double width = 4.0, height = 5.0, side= 3.0;
GeoObject rectangle = new Rectangle (width, height);
GeoObject square= new Square(side);
System.out.println ("Perimeter = " + rectangle.Perimeter());
System.out.println ("Surface= " + rectangle.Surface());
System.out.println ("Perimeter= " + square.Perimeter());
System.out.println ("Surface= " + square.Surface());
}
}
class Rectangle extends GeoObjects{
double width, height, side;
Rectangle (double width, double height){
this.width = width;
this.height= height;
}
public double Perimeter (){
return 2*(width+ height);
}
public double Surface(){
return width* height;
}
}
class Square extends Rectangle {
double side;
Square (double side){
this.side= side;
}
public double Perimeter (){
return 4*side;
}
public double Surface(){
return side*side;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了编译器信息,即Square构造函数具有与Rectangle不同的变量数量。
编译器错误消息通知您,您正在尝试使用与构造函数Rectangle不同数量的参数来调用超类构造函数。您并未在中显式调用超类构造函数Square,因此编译器已在中插入了对默认超类构造函数的调用Rectangle-有效地super();作为中的第一行Square()。
但是Rectangle没有参数,没有构造函数。只有一个带有2个参数。通过传递两次side来适当地调用它super()。
您还将注意到,Perimeter和Surface方法不再需要被覆盖,因为它们现在将使用超类中的适当值。
同样,常规的Java方法命名约定将让您以小写字符开头的方法命名:perimeter和surface。
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |