抽象クラスと最終クラス

3176 ワード

1.抽象クラス
クラスの宣言にabstractキーワードがあるクラスを抽象クラスと呼び、抽象クラスはクラスの階層の高い階層にあり、インスタンス化できない、すなわち抽象クラスのインスタンスオブジェクトを作成できない.abstractキーワード修飾のないクラスを特定のクラスと呼び,特定のクラスをインスタンス化することができる.
プログラム設計では、抽象クラスは、サブクラスが繰り返し定義されないように、いくつかのクラスを要約して抽象化するためによく使用されます.すなわち、抽象クラスはサブクラスに共通する属性と方法を定義します.すなわち,抽象クラスは主にいくつかの機能クラスが同じクラスとして定義された親クラスに用いられる.
抽象クラスを定義する目的は、オブジェクトを作成するテンプレートではなく、サブクラスの基礎を築くことです.
抽象クラスの宣言文の形式は次のとおりです.
public abstract class     {
        ;
}

抽象クラスには以下の特徴があります.
(1)new抽象クラスのインスタンスを作成できない.
(2)特定のクラスと同様に,クラスには構築メソッドを含むメンバー変数とメンバーメソッドがあるが,抽象クラスでは抽象メソッドを定義できる.
(3)抽象メソッドは抽象クラスにしか現れないが,抽象クラスには抽象メソッドがなくてもよい.
(4)抽象クラス内のすべての抽象メソッドは、その非抽象サブクラスで実装されなければならない.そうしないと、サブクラスも抽象クラスとして宣言されなければならない.
2.抽象的な方法
クラスのメンバーメソッドにabstractキーワード修飾が宣言されるメソッドを抽象メソッドと呼ぶ.抽象的な方法は、システムの機能を記述したり、いくつかの操作を規範化したりするために使用されます.abstractキーワード修飾のない方法を具体的な方法と呼び,具体的な方法には方法体が必要である.
抽象メソッドのフォーマットは次のとおりです.
      abstract          (      );

例:
abstract void eat();   //抽象メソッド
宣言クラスのeat()メソッドは抽象メソッドです.しかし、構造方法は抽象的と宣言できないことを説明する必要がある.abstractとstaticは同時に存在しない、すなわちabstract staticメソッドは存在しない.
Javaでは、抽象メソッドを含むクラスは抽象クラスとして宣言する必要があります.抽象クラスには実装されていないメソッドが含まれているため、抽象クラスはオブジェクトを直接定義するために使用できません.
プログラム設計では、抽象クラスは主にいくつかの機能クラスが同じクラスの親として定義されるために使用されます.
package page106;
abstract class Animal{
	String str;
	
	Animal(String s){	//          
		str=s;
	}
	abstract void eat();	//      
}
class Horse extends Animal{
	String str;
	
	Horse(String s){
		super(s);		//         
	}
	void eat() {		//         
		System.out.println("    !");
	}
}
class Dog extends Animal{
	String str;
	
	Dog(String s){
		super(s);
	}
	void eat() {
		System.out.println("    !");
	}
}
public class Test {
	public static void main(String[] args) {
		Animal h=new Horse(" ");
		Animal d=new Dog(" ");
		h.eat();
		d.eat();
	}
}

出力結果:
馬は草を食べる!
犬が骨を食う!
上記の例では、
<1>プログラム設計では、抽象クラスは必ずあるクラスまたはあるクラスの親である.
<2>いくつかの抽象クラスのサブクラスは、いくつかの同名の方法を実装します.
3.最終クラスと最終メソッド
最終クラスとは、継承できないクラス、すなわち最終クラスで子を派遣できないクラスを指す.Java言語では、クラスを継承したくない場合は、このクラスを最終クラスと宣言できます.最終クラスはキーワードfinalで説明されます.
  :
public final class FinalClass{
    //...
}

Javaは,最終クラスのメソッドが自動的にfinalメソッドになることを規定している.JavaではMathクラスが最終クラスですが、中のメソッドは修正できません.
最終的に不要に類似して作成され、クラス内のいくつかのメソッドが書き換えられないことを保護したい場合は、キーワードfinalを使用して、クラスに書き換えられないメソッドを示すことができます.これらのメソッドを最終メソッドと呼びます.
  :
public final void fun();
package page107;
class Person{
	String name;
	
	public Person() {
	}
	final String getName() {
		return "person";
	}
}
class Student extends Person{
	public Student() {
	}
	//final String getName(){
	//	return "student";
	//}
	//         ,   
}

プログラム設計では、最終クラスはいくつかの重要なクラスのすべての方法を保証することができ、今後のプログラムメンテナンスでは、何気なくサブクラスを定義したために修正されません.最終的なメソッドは、いくつかのクラスのキーメソッドが、サブクラスを不用意に定義したり上書きしたりする方法によって、後でプログラムメンテナンスで変更されないことを保証します.
クラスは最終クラスでも抽象クラスでもないことに注意してください.すなわち、キーワードabstractとfinalは併用できません.クラス宣言では、キーワードpublicとabstract(またはfinal)を同時に表示する必要がある場合、publicはabstract(またはfinal)の前に配置されます.