为什么接口没有构造函数,而抽象类却具有Java构造函数?

构造 是特定类别的非静态成员相对于一个对象初始化。

接口中的构造方法

  • Java中的 接口 没有构造函数, 因为默认情况下,接口中的所有数据成员都是public static final ,它们是常量(在声明时分配值)。

  • 接口中没有数据成员可通过构造函数对其进行初始化。

  • 为了调用方法,我们需要一个对象,因为接口中的方法没有主体,因此无需在接口中调用方法。

  • 由于我们无法在接口中调用方法,因此无需为接口创建对象,也无需在其中构造函数。

例子1

interface Addition {
   int add(int i, int j);
}
public class Test implements Addition {
   public int add(int i, int j) {
      int k = i+j;
      return k;
   }
   public static void main(String args[]) {
      Test t = new Test();
      System.out.println("k值为:" + t.add(10,20));
   }
}

输出结果

k值为:30

班上的构造函数

  • 的宗旨,构造 一个类 来初始化字段,但不建对象。

  • 当我们尝试创建抽象超类的新实例时,编译器将给出错误。

  • 但是,我们可以继承抽象类并通过设置其变量来使用其构造函数。

例子2

abstract class Employee {
   public String empName;
   abstract double calcSalary();
   Employee(String name) {
      this.empName = name; // Constructor of abstract class  
   }
}
class Manager extends Employee {
   Manager(String name) {
      super(name); // setting the name in the constructor of subclass
   }
   double calcSalary() {
      return 50000;
   }
}
public class Test {
   public static void main(String args[]) {
      Employee e = new Manager("Adithya");
      System.out.println("经理名称是:" + e.empName);
      System.out.println("工资是:" + e.calcSalary());
   }
}

输出结果

经理名称是:Adithya
工资是:50000.0