抽象クラスabstractについて

抽象クラスabstractって?

メソッドの実体を具体的には定義せずに、宣言のみをするときに使います。

言葉の説明は難しい

Main.java
  1 public class Main {
  2   public static void main(String[] args) {
  3     Zukei z = new En();
  4     z.print();
  5   }
  6 }
Zukei.java
  1 public abstract class Zukei {  //抽象クラスZukeiの宣言
  2   abstract void print();    //抽象メソッドprint()の宣言
  3 }   
En.java
  1 public class En extends Zukei { //抽象クラスZukeiを継承して、その実装クラスEnの宣言
  2   public void print() {     //抽象メソッドprint()の実装
  3     System.out.println("円");
  4   }
  5 }

実行してみる

$ java Main
円

注意事項

1つでも抽象メソッドを持つクラスは抽象クラスとして宣言する必要がある

例えば、以下のクラスAは抽象メソッドa()を持っているので、抽象クラスとして宣言する必要があります。

class A {
  abstract void a() {   //.....   }
  void b() { //..... }

正しくは

abstract class A {
  abstract void a() {   //.....   }
  void b() {  //.....  }
}
抽象クラスにfinal、static、privateを指定することはできない
abstract final class A { // こんなことできません。

}
abstract static class A { //こんなこともできません。

}
privateに関しては今のところ、よく分かりません。
抽象クラスのインスタンスを生成することはできない。
Zukei.java
  1 public abstract class Zukei {  //抽象クラスZukeiの宣言
  2   abstract void print();    //抽象メソッドprint()の宣言
  3 }   

抽象クラスZukeiに対して、以下のようにインスタンスを生成することはできない

Zukei z = new Zukei();   //こんなことできません。