Javaは、抽象クラスとインタフェースの違いを詳細に説明しました

抽象クラスとは何ですか

抽象メソッドがある場合は、「カテゴリ」では、このクラスは抽象クラスと呼ばれ、抽象クラスの前に必要です。
抽象メソッド:多状態において、プロセスは、しばしば冗長母体廃棄抽象形成方法の選択方法であるので、何らの方法は、その方法は、抽象メソッドを呼び出していない場合は、1つの方法。そのコードの形式:


public abstract class Mammal {//父类
	
	public abstract void move();
}

詳細な抽象クラス

1は、親クラス抽象メソッドならば、あなたはそれ以外の場合は、サブクラスが抽象クラス、抽象クラスでなければなりませんし、オブジェクトを作成することはできませんので、抽象メソッドをサブクラス化する必要があります。

public abstract class Mammal {//父类
	
	public abstract void move();
	
	public abstract void breathe();
}

サブクラスは、次のように書くことができます。

public class Whale extends Mammal{//子类

	@Override
	public void move() {
		System.out.println("靠鱼鳍游泳");
	}
	
	@Override
	public void breathe() {
		System.out.println("靠鱼鳃游泳");
	}
}

または:

public abstract class Whale extends Mammal{//子类

}

2、抽象クラスは、オブジェクトを作成することはできませんが、コンストラクタを持つことができます。

public abstract class Mammal {//父类
	
	public Mammal(int age) {//可以创建Mammal方法
		//Mammal mammal = new Mammal();mammal不能创建对象
	}
	
	public abstract void move();
	
	public abstract void breathe();
}

図3に示すように、抽象クラスが抽象メソッドの缶ではなく、必須抽象メソッドが抽象クラスであり、
図4に示すように、抽象クラスは、最終的な変形によって(直接多型反射)しません。
図5は、通常のクラス抽象クラスとの間の差:
。Aクラスは共通であってもよい抽象オブジェクト・クラスを作成できません。
Bには一般的なカテゴリが存在しない;.、抽象クラスが抽象的修飾をキーワード有する
C抽象クラスは、抽象メソッド、一般的なカテゴリを有することができます。確かに抽象メソッド。

インターフェースは何ですか

ソースファイル内のすべての方法は、全体の抽象メソッドは、これはインタフェース・ソース・ファイルを定義することができる場合。コード形式は次の通り:

public interface IMammal {

		public abstract void move();
		
		public abstract void breathe();

}

詳細インタフェース

1、何インタフェースコンストラクタはありません。
パブリック抽象への2、インターフェイスメソッドのデフォルト値は、それを無視することができます。

public interface IMammal {

	/*public IMammal() {//不能构造方法
		
	}*/
	
	void move();//忽略public abstract
		
	void breathe();//忽略public abstract

}

図3に示すように、インターフェースは、複数のインタフェースを継承することができます。

interface IA{//接口A
	
}

interface IB{//接口B
	
}
public interface Mammal extends IA,IB{//继承接口A,B
	
	void move();
		
	void breathe();

}

4、状態:インターフェイス名はI(コード仕様)で始まる
5、インタフェース変数のデフォルトのpublic staticへの最終的な(すなわち静的定数です)。だから、インタフェースの名前の変数はすべて大文字でなければなりません。

public interface IMammal{
	
	void move();
		
	void breathe();

	int AGE = 957;
}

public class Test {

	public static void main(String[] args) {
		//IMmammal.AGE = 125;  //不可实现,代码报错,从而证明5。
		System.out.println(IMammal.AGE);
		
	}
}

図6は、インターフェイスは、抽象メソッドを継承器具の使用を必要とします。
インタフェースを実装する場合7、あなたは、インターフェイスで定義された定数を継承することができます。

public interface IMammal{
	
	void move();
		
	void breathe();

	int AGE = 957;
}

public class Whale implements IMammal{

	@Override
	public void move() {
		
	}

	@Override
	public void breathe() {
		
	}

}
public class Test {

	public static void main(String[] args) {
		
		System.out.println(IMammal.AGE);
		System.out.println(Whale.AGE);
		
	}
}

すべての抽象メソッドがインタフェースを実装していない場合は8、クラスは、そのクラスは抽象的でなければなりません。

public interface IMammal{
	
	void move();
		
	void breathe();

	int AGE = 957;
}

public abstract class IWhale implements IMammal{
	@Override
	public void move() {
		
	}
}

図9に示すように、クラスは複数のインターフェイスを実装することができます。

public abstract class IWhale implements IMammal,List{

	@Override
	public void move() {
		
	}

	@Override
	public void breathe() {
		
	}
	@Override
	public int size() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		return false;
	}

}

図10は、instanceofの目的は、後者のタイプの前部を指摘するかどうかを決定するために、結果は、boolean型です。

public class Test {

	public static void main(String[] args) {
		
		Whale whale = new Whale();
		
		System.out.println(whale instanceof Whale);
		System.out.println(whale instanceof Object);//Object为所有类的父类
		System.out.println(whale instanceof IMmammal);
		
		
	}
}

結果は次のとおりです。
trueに
trueに
trueに

違い

1、およびオブジェクトコンストラクタ:
抽象クラスは、オブジェクトを作成することはできませんが、コンストラクタを持つことができ、
インターフェースインターフェースは、直接オブジェクトを作成するために、新しいキーワードを使用することはできませんが、限定されないが、それはオブジェクトを作成できません、この方法は、抽象的にすることはできません。
2、修飾子:
クラスの前に抽象追加するための抽象クラスの必要性、
インタフェースはインタフェース名、および無クラスの前にインターフェイスを追加する必要があります。

公開された19元の記事 ウォンの賞賛0 ビュー456

おすすめ

転載: blog.csdn.net/zzu957/article/details/105014395