コンストラクション関数とmain関数がインタフェースと抽象クラスに存在するかどうか

1708 ワード

一般的にjavaクラスではmain関数やコンストラクション関数をよく使いますが、抽象クラス(abstract class)やインタフェース(interface)でも使ったことがありますか?その時私もよく知らなかったのでテストをしました.

abstract class Father{
	public Father()
	{
		System.out.println("In abstract Father constructor...");
	}
	public static void main(String as[]) {
		System.out.println("In abstract Father main...");
	}
}

class Child extends Father{
	public Child()
	{
		super();
		System.out.println("In child constructor...");
	}
	public static void main(String as[]) {
		System.out.println("In child main...");
	}
}  

FatherとChildをそれぞれ実行します.
Father:
In abstract Father main...

Child:
In child main...

new Child:

In abstract Father constructor...
In child constructor...

インタフェースではmain関数とコンストラクション関数を宣言することはできません.なぜmain関数と構築はクラスと抽象クラスで可能であり、インタフェースではできないのですか?
1.インタフェースにstaticの方法は存在しない、インタフェースのすべての方法は非静的でなければならない(no-static).インタフェースは、すべてのメソッドを実装クラスによって実装しなければならないためです.インタフェースにmain関数は存在しません.
2.抽象クラスはインタフェースに似ていますが、インタフェースとクラスの間に介在する特殊なクラスです.抽象クラスは独自の非静的メソッドを持つことができるからです.したがってmain関数は抽象クラスで宣言できます.また抽象クラスでは継承が強調されるため,構造関数と継承の多くの特性には密接な関係がある.たとえば、子クラスがインスタンス化されると、そのコンストラクション関数が最初に呼び出されます.親クラスのコンストラクション関数が実行されると、そのコンストラクション関数が完了します.したがって、抽象クラスにはその構造関数が必要です.
ただし、上記の説明は表面的な説明にすぎず、JVMがアプリケーションを実行する場合、main関数が最初に実行されます.この時点でクラスはインスタンス化されていません.JVMはクラス名で直接呼び出されます.これは、mian関数がpublic staticを宣言しなければならない理由です.mainメソッドは特殊な仕様として一般的なメソッドとは大きく異なり,制約が多く,その原理を理解するにはJVMに関する知識を学ぶ必要がある.