我们可以在Java中将构造函数声明为final吗?

构造用于创建时初始化对象。从语法上讲,它类似于一种方法。区别在于,构造函数与其类具有相同的名称,并且没有返回类型。

无需显式调用构造函数,这些构造函数会在实例化时自动调用。

示例

public class Example {

   public Example(){

      System.out.println("This is the constructor of the class example");

   }

   public static void main(String args[]) {

      Example obj = new Example();

   }

}

输出结果

This is the constructor of the class example

最终方法

每当将方法定型为最终方法时,都无法覆盖它。也就是说,您不能从子类提供对超类的final方法的实现。

即,使方法成为最终方法的目的是防止从外部(子类)修改方法。

示例

在下面的Java程序中,我们试图覆盖final方法。

class SuperClass{

   final public void display() {

      System.out.println("This is a method of the superclass");

   }

}

public class SubClass extends SuperClass{

   final public void display() {

      System.out.println("This is a method of the superclass");

   }

}

编译时错误

编译时,上面的程序生成以下错误。

SubClass.java:10: error: display() in SubClass cannot override display() in SuperClass

final public void display() {

                  ^

overridden method is final

1 error

将构造函数声明为final

在继承中,只要您扩展类。子类继承除构造函数之外的所有超类成员。

换句话说,构造函数不能在Java中继承,因此,您不能覆盖构造函数。

因此,在构造函数之前编写final毫无意义。因此,java不允许在构造函数之前使用final关键字。

如果尝试这样做,则使构造函数为final会生成一个编译时错误,提示“此处不允许使用修饰符final”。

示例

在下面的Java程序中,Student类具有一个最终的构造函数。

public class Student {

   public final String name;

   public final int age;

   public final Student(){

      this.name = "Raju";

      this.age = 20;

   }

   public void display(){

      System.out.println("Name of the Student: "+this.name );

      System.out.println("Age of the Student: "+this.age );

   }

   public static void main(String args[]) {

      new Student().display();

   }

}

编译时错误

编译时,上面的程序生成以下错误。

输出结果

Student.java:6: error: modifier final not allowed here

public final Student(){

            ^

1 error

以上是 我们可以在Java中将构造函数声明为final吗? 的全部内容, 来源链接: utcz.com/z/338585.html

回到顶部