abstract
クラスには次のような特殊なスーパークラスがあります。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34  | 
						package jp.ayax.object; public class Main { 	public static void main(String[] args) { 		Children c = new Children(); 		c.process1(); 	} } abstract class Parent { 	int num; 	abstract void process1(); 	abstract void process2(int num); 	public void process3(){ 		System.out.println("process2"); 	} } class Children extends Parent{ 	@Override 	void process1() { 		System.out.println("process1"); 	} 	@Override 	void process2(int num) { 		System.out.println("process2"); 	} }  | 
					
一見普通のクラスのように見えますが、11行目のクラス定義に「abstract」が付いています。これはこのクラスが特殊なスーパクラス「abstract」であることを定義しています。
| 
					 11  | 
						abstract class Parent {  | 
					
さらに、15行目~16行目にも「abstract」があります。
| 
					 15 16  | 
						abstract void process1(); abstract void process2(int num);  | 
					
メソッドの定義のようですが、処理内容が記述されていません。
「abstract」が付いたスーパークラスで、さらに「abstract」が付いたメソッドは、名前や引数等の定義だけ行います。そして、処理内容は強制的にサブクラスで記述させることになります。従って、「abstract」の付いたクラスをサブクラスで継承した場合は、「abstract」の付いたメソッドの処理を記述しないとエラーになってしまうのです。
まるで、指示だけ出す上司や厳格な父親みたいな存在です。しかしこの「abstract」、使いどころがあります。それは後述します。

