Java 使用构造函数继承
Java inheritance with constructor
大家好,我正在研究一个简单的 java 形状继承程序。我知道我的问题不是什么新问题,但我已经研究过,通常的问题是超级参数与父级 class 的构造函数参数类型不匹配。但是,我有匹配的参数,但仍然出现此错误。错误发生在平行四边形的 super 语句中。任何帮助将不胜感激,谢谢!
public abstract class Quadrilateral implements Shapes
{
double base, height, perimeter, area, s1, s2, s3, s4;
String name;
public Quadrilateral(String name, double base, double height, double side1, double side2, double side3, double side4){
this.name = name;
this.base = base;
this.height = height;
s1 = side1;
s2 = side2;
s3 = side3;
s4 = side4;
}
public double getHeight(){
return height;
}
public double getS1(){
return s1;
}
public double getS2(){
return s2;
}
public double getS3(){
return s3;
}
public double getS4(){
return s4;
}
public double getPerimeter(){
return s1 + s2 + s3 + s4;
}
public String toString(){
String str;
str = "name is " + name + "\n";
str += "area is " + area + "\n";
str += "perimeter is " + perimeter + "\n";
str += "sides 1-4 are " + s1 + ", " + s2 + ", " + s3 + "and " + s4;
return str;
}
}
新class
public class Parallelogram extends Quadrilateral
{
public Parallelogram(String name, double base, double height){
super(name, side1, side2, side1, side1, side2, side2); //RECIEVE ERROR HERE WITH THE FIRST SIDE1!!!
}
public double getArea(){
area = base * height;
return area;
}
public String getName(){
return name;
}
}
新class
public class Rectangle extends Parallelogram
{
public Rectangle(String name, double side1, double side2){
super(name, side1, side2);
}
}
新class
public class Square extends Rectangle
{
public Square(String name, double side1){
super(name, side1, side2);
}
}
您正在将未在 Parallelogram
构造函数中定义的值传递给基本构造函数 - 即 side1
和 side2
。一种选择是更改
public Parallelogram(String name, double base, double height){
super(name, side1, side2, side1, side1, side2, side2); //RECIEVE ERROR HERE WITH THE FIRST SIDE1!!!
}
至
public Parallelogram(String name, double base, double height, double side1, double side2){
super(name, base, height, side1, side1, side2, side2);
}
Rectangle
和 Square
也类似
您没有在四边形 class 中使用 "this.s1" 关键字是有原因的吗?
此外,您是否打算在任何子 classes 中声明一个抽象方法?
此外,您应该养成将实例变量声明为私有的习惯,这是一种很好的做法,可以促进数据封装(数据隐藏)。
我认为如果您的所有子classes 都扩展为四边形,那将是一个更好的程序。而不是四边形延伸平行四边形延伸矩形延伸正方形等。
享受吧!
大家好,我正在研究一个简单的 java 形状继承程序。我知道我的问题不是什么新问题,但我已经研究过,通常的问题是超级参数与父级 class 的构造函数参数类型不匹配。但是,我有匹配的参数,但仍然出现此错误。错误发生在平行四边形的 super 语句中。任何帮助将不胜感激,谢谢!
public abstract class Quadrilateral implements Shapes
{
double base, height, perimeter, area, s1, s2, s3, s4;
String name;
public Quadrilateral(String name, double base, double height, double side1, double side2, double side3, double side4){
this.name = name;
this.base = base;
this.height = height;
s1 = side1;
s2 = side2;
s3 = side3;
s4 = side4;
}
public double getHeight(){
return height;
}
public double getS1(){
return s1;
}
public double getS2(){
return s2;
}
public double getS3(){
return s3;
}
public double getS4(){
return s4;
}
public double getPerimeter(){
return s1 + s2 + s3 + s4;
}
public String toString(){
String str;
str = "name is " + name + "\n";
str += "area is " + area + "\n";
str += "perimeter is " + perimeter + "\n";
str += "sides 1-4 are " + s1 + ", " + s2 + ", " + s3 + "and " + s4;
return str;
}
}
新class
public class Parallelogram extends Quadrilateral
{
public Parallelogram(String name, double base, double height){
super(name, side1, side2, side1, side1, side2, side2); //RECIEVE ERROR HERE WITH THE FIRST SIDE1!!!
}
public double getArea(){
area = base * height;
return area;
}
public String getName(){
return name;
}
}
新class
public class Rectangle extends Parallelogram
{
public Rectangle(String name, double side1, double side2){
super(name, side1, side2);
}
}
新class
public class Square extends Rectangle
{
public Square(String name, double side1){
super(name, side1, side2);
}
}
您正在将未在 Parallelogram
构造函数中定义的值传递给基本构造函数 - 即 side1
和 side2
。一种选择是更改
public Parallelogram(String name, double base, double height){
super(name, side1, side2, side1, side1, side2, side2); //RECIEVE ERROR HERE WITH THE FIRST SIDE1!!!
}
至
public Parallelogram(String name, double base, double height, double side1, double side2){
super(name, base, height, side1, side1, side2, side2);
}
Rectangle
和 Square
您没有在四边形 class 中使用 "this.s1" 关键字是有原因的吗? 此外,您是否打算在任何子 classes 中声明一个抽象方法?
此外,您应该养成将实例变量声明为私有的习惯,这是一种很好的做法,可以促进数据封装(数据隐藏)。
我认为如果您的所有子classes 都扩展为四边形,那将是一个更好的程序。而不是四边形延伸平行四边形延伸矩形延伸正方形等。 享受吧!