我对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()
答案 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.
}
}