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」、使いどころがあります。それは後述します。