abstract(extends)の基礎

C:\DATA\Java2\Dos>java Example
抽象メソッドのサンプルプログラム
Gcm(24,32)=8
Lcm(30,18)=90
 -- Press any key to exit (Input "c" to continue) --

最大公約数と最小公倍数の計算を例にして abstract(extends)の基礎を説明します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして Example.java の名前で保存して下さい。
    //★ 抽象メソッドのサンプルプログラム   前田 稔
    abstract class GcmLcm
    {
        // Message を表示
        void Msg()
        {   System.out.println("抽象メソッドのサンプルプログラム");  }
    
        // 抽象メソッドとして定義
        abstract int    Gcm(int a, int b);
        abstract int    Lcm(int a, int b);
    }
    
    // 抽象メソッドを継承したクラス
    class EX extends GcmLcm
    {
        // メソッド Gcm の本体の定義
        public int Gcm(int a, int b)
        {   int w1,w2;
            w1= a;
            w2= b;
            while(w1!=w2)
            {   if (w1>w2)  w1 -= w2;
                else        w2 -= w1;
            }
            return w1;
        }
    
        // メソッド Lcm の本体の定義
        public int Lcm(int a, int b)
        {   return a*b/Gcm(a, b);
        }
    }
    
    // Main メソッド
    public class Example
    {
        // Main
        public static void main(String[] args)
        {   GcmLcm  object = new EX();
            object.Msg();
            System.out.println("Gcm(24,32)=" + object.Gcm(24,32));  // メソッド Gcm の実行
            System.out.println("Lcm(30,18)=" + object.Lcm(30,18));  // メソッド Lcm の実行
        }
    }
    
  2. ページ先頭のメッセージがコンソール画面に表示されたら完成です。

プログラムの説明

  1. extends(継承)は Windows や Java Applet で Class を継承するときに良く使われる機能です。
    例えば次のように使います。
        // Frame を継承して Windows 画面を表示します。
        public class FrameExt extends Frame
        {
            ・・・
    
        // JFrame を継承して Windows 画面を表示します。
        public class JFrameView extends JFrame
        {
            ・・・
    
        // Applet を継承して Java Applet のプログラムを作成します。
        public class HelloApplet extends Applet
        {   public void paint(Graphics g)
            ・・・
        
  2. ここでは抽象クラスの定義と extends で継承する方法を説明をします。
    クラスの継承は LCM Class で最小公倍数を印字 を参照して下さい。
    抽象クラスは abstract を宣言して下さい。
    Msg() はメッセージを表示する普通のメソッドです。
    Gcm(int a, int b) と Lcm(int a, int b) が抽象メソッドで、型は定義されていますが、実体がありません。
    実体(本体)は GcmLcm を継承した派生クラス(サブクラス)で記述します。
        abstract class GcmLcm
        {
            // Message を表示
            void Msg()
            {   System.out.println("抽象メソッドのサンプルプログラム");  }
    
            // 抽象メソッドとして定義
            abstract int    Gcm(int a, int b);
            abstract int    Lcm(int a, int b);
        }
        
  3. 抽象クラス(GcmLcm) を継承したサブクラス EX です。
    この中で Gcm()メソッドと Lcm()メソッドの実体を定義します。
    例え使わなくても abstract で宣言されたメソッドは実体を定義しなければなりません。
    extends で継承出来るクラスは一個だけに制限されています。
    最大公約数と最小公倍数の計算は コンソールから数値を入力する を参照して下さい。
        // 抽象メソッドを継承したクラス
        class EX extends GcmLcm
        {
            // メソッド Gcm の本体の定義
            public int Gcm(int a, int b)
            {
                ・・・
            }
    
            // メソッド Lcm の本体の定義
            public int Lcm(int a, int b)
            {
                ・・・
            }
        }
        
  4. Main メソッドです。
    抽象クラス(GcmLcm) を継承した class EX を new でインスタンス化(生成)します。
    class EX のメソッドを使って GCL, LCM を計算して表示します。
        // Main メソッド
        public class Example
        {
            // Main
            public static void main(String[] args)
            {   GcmLcm  object = new EX();
                object.Msg();
                System.out.println("Gcm(24,32)=" + object.Gcm(24,32));  // メソッド Gcm の実行
                System.out.println("Lcm(30,18)=" + object.Lcm(30,18));  // メソッド Lcm の実行
            }
        }
        

超初心者のプログラム入門(Java2)