Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで抽象クラスにコンストラクターがあるのに、インターフェースにコンストラクターがないのはなぜですか?


コンストラクター オブジェクトに関して特定のクラスの非静的メンバーを初期化することです。

インターフェースのコンストラクター
  • インターフェース Javaにはコンストラクタがありません インターフェイスのすべてのデータメンバーはpublicstatic 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 value is:" + t.add(10,20));
   }
}

出力

k value is: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("Manager Name is:" + e.empName);
      System.out.println("Salary is:" + e.calcSalary());
   }
}

出力

Manager Name is:Adithya
Salary is:50000.0

  1. Javaの抽象クラス

    宣言にabstractキーワードを含むクラスは、abstractクラスと呼ばれます。 抽象クラスには、抽象メソッド、つまり本体のないメソッドが含まれる場合と含まれない場合があります(public void get();) ただし、クラスに少なくとも1つの抽象メソッドがある場合、そのクラスは抽象として宣言する必要があります。 クラスが抽象として宣言されている場合、インスタンス化することはできません。 抽象クラスを使用するには、それを別のクラスから継承し、そのクラスに抽象メソッドの実装を提供する必要があります。 抽象クラスを継承する場合は、その中のすべての抽象メソッドに実装を提供する必要がありま

  2. コンストラクターがJavaでfinalになれない理由

    finalキーワードは、メソッドがオーバーライドされるのを防ぎます。コンストラクターをオーバーライドすることはできません。Javaではコンストラクターをfinalとしてマークすることはできません。