'超级' Java中的关键字

时间:2014-10-12 19:04:07

标签: java super

我对java中的super关键字有疑问。 请按照以下示例:

public class Circle {
private double radius;
private double area; 

public void setRadius(double radius){
    this.radius = 1; 

}
public double getRadius(){
    return this.radius;
}
public void setArea(double radius){
    this.area = area;
}
public double getArea(){
    return this.area = Math.PI * radius * radius;
}
}


public class Cylinder extends Circle {
    private double height;
    public Cylinder(){
        super();
        height = 1;
    }
    public Cylinder(double height){
        super();
        this.height = height;
    }
    public Cylinder(double radius, double height){
        super();
        this.height = height;
        public double getHeight(){
            return height;
        }
    }
public double getVolume(){
    return getArea()*height;
}
}

我的观点是,当我在子类中使用super()时,java将如何知道在我的子类中调用哪个构造函数?因为在我的超类中,我有两个没有参数的构造函数; public double getRadius()和public double getArea()

2 个答案:

答案 0 :(得分:4)

超类中只有一个构造函数,默认的无参数构造函数,未在类中明确定义。每个子类的构造函数都将在超类中调用此构造函数。

getRadius()getArea()只是super类中的方法,它们不是构造函数。请记住,构造函数始终采用以下形式:

[access modifier] [Class Name](/* arguments optional*/){}

因此Circle类的构造函数如下所示:

public Circle(/*Arguments could go here */){

}

如果super课程中有多个构造函数,请说:

public Circle(int radius){
  //....
}

public Circle(double radius){
  //....
}

编译器将使用参数来确定要调用的构造函数。

答案 1 :(得分:0)

构造函数名称将是类名。你在谈论那里的方法。

class classname{

   classname(){// constructor name as class name.
   }

}