【问题标题】:'Super' keyword in JavaJava中的“超级”关键字
【发布时间】:2014-10-12 19:04:06
【问题描述】:

我对 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()

【问题讨论】:

  • Circle 的构造函数将命名为Circle。由于您没有明确声明一个,编译器创建了一个,没有参数。这就是上述所有super 调用所使用的内容,因为没有“更好”的适合。

标签: java super


【解决方案1】:

你的超类中只有一个构造函数,默认的无参数构造函数没有在类中显式定义。每个子类的构造函数都会在超类中调用这个构造函数。

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){
  //....
}

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

【讨论】:

  • 您能详细说明一下吗?
  • 在哪一部分?最重要的是要掌握getRadiusgetArea 不是构造函数,它们是常规方法。超类的唯一构造函数是默认构造函数,如果不存在构造函数,编译器会将其添加到类中。
  • 你能解释一下'this'关键字吗?例如,这是什么意思? this.name = name;
  • 这是指当前对象或类类型的实例。所以this.name 指的是在类上声明的name 变量,而不是一个名为name 的局部变量。这是区分类实例变量和局部变量的好方法。我不确定您对 Java 的熟悉程度,但拿起参考书可能是个好主意。另请参阅此答案:stackoverflow.com/a/3728188/714969
【解决方案2】:

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

class classname{

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

}

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多