ためになるホームページ お問い合わせ




TOP > Java > クラス宣言と修飾子
クラス作成時の注意点
  • 各ソースコードファイルにpublicクラスは一つしか存在できない。
  • ファイルの名前は、publicクラスの名前と一緒でなければならない。
  • そのクラスがパッケージの一部である際は、先頭の行でそれを宣言しなければならない。
  • 他のクラスをインポートする際は、パッケージ宣言の次の行で宣言しなければならない。もし、パッケージ宣言がない場合は、先頭の行でimportを宣言する。
  • パッケージ、インポートがない場合は先頭の行でクラスの宣言をする。但し、パッケージ・インポート文がある時は、その次の行でクラス宣言をする。宣言の順序をまとめると、以下の通り。
  • (package) → (import) → class※()はあった際。
  • package、import文はそのソースコード内全てのクラスに適用される。
  • コメントはソースコードのどこにあっても構わない。

  • クラスに使えるアクセス修飾子
    「クラスにアクセスする」とは、以下の3つのパターンがある。
  • クラスAがクラスBのインスタンスを生成する。
  • クラスBを拡張し、クラスAがクラスBのサブクラスとなる。
  • クラスB内の特定のメソッドと変数にアクセスできる。(メソッドと変数のアクセス制御に依存する)

  • クラスに付けれるアクセス修飾子[デフォルトアクセス]
  • デフォルトアクセスとは、修飾子のついていない場合の事。
  • デフォルトアクセスは同一パッケージ内のみのアクセスとなる。
  • 同一パッケージ内にないクラスは、継承(extends)もできないという事である。

  • デフォルトアクセスの例
    //TestDog.java
    package dog ;
    
    class TestDog{
    
    }
    
    
    //TestCat.java
    package Cat ;
    
    import dog.TestDog ;
    
    class TestCat extends TestDog{
    
    }
    
    

    TestCatはTestDogを継承したいが、TestDogはデフォルトアクセスなのでアクセスできない。よって、TestDogはコンパイルできるが、TestCatはコンパイルできない。
    これをコンパイルできるようにするには、「同一のパッケージにする」もしくは、「TestDogクラスをpublicクラスにする」のどちらかをしなければならない。

    クラスに付けれるアクセス修飾子[publicアクセス]
    クラスをパブリックアクセスにすると、全てのパッケージの全てのクラスに対してアクセスできるようになる。他のパッケージに属しているクラスにアクセスするには、そのパッケージをパブリッククラスにし、そのパッケージをインポートすればよい。

    publicアクセスの例
    //TestDog.java
    package dog ;
    
    public class TestDog{//publicをつける
    
    }
    
    
    //TestCat.java
    package Cat ;
    
    import dog.TestDog ;
    
    class TestCat extends TestDog{
    
    }
    
    

    ファイナルクラス(final)
    クラスをfinalで宣言すると、そのクラスからサブクラスが作れなくなる。ファイルを拡張することができなくなり、継承しようとするとコンパイルエラーになる。使用するケースはそのクラスのメソッドをオーバーライド(上書き)されたくない時に使用する。
    finalと一緒に宣言できる修飾子は、「public」、「strictfp」

    final修飾子の例
    //TestDog.java
    package dog ;
    
    public final class TestDog{//final修飾子をつける
    
    }
    
    
    //TestCat.java
    package Cat ;
    
    import dog.TestDog ;
    
    class TestCat extends TestDog{
    
    }
    
    

    抽象クラス(abstract)
    「abstract」修飾子で宣言されたクラスを抽象クラスという。以下に抽象クラスの特徴を示す。
  • 抽象クラスの存在意義は、継承されること。
  • 抽象クラスはインスタンス生成できない。抽象クラスは継承を前提としている為、不完全なクラスである。
  • 抽象クラス内のメソッドの定義がない場合(中括弧{}がない、すなわち;で終わっている。)、そのメソッドに必ず、「abstract」をつける。もし、メソッドに「abstract」修飾子がついていてかつインタフェースでない場合は、クラスは抽象クラスなのでクラスに修飾子「abstract」をつける。
  • ちなみに抽象クラス内に、非抽象メソッドを記述する事はできる。
  • abstractと一緒に宣言できる修飾子は、「public」、「strictfp」。
  • 抽象クラスを継承する際、その継承するクラスを「abstract」で宣言できる。「abstract」で宣言した場合、そのクラスで実装しなくても構わない。最初の非抽象(具象)クラスで実装すればよい。

  • abstract修飾子の例
    abstract class Test{//抽象クラス
        abstract int add(int a , int b) ;//抽象メソッド
    }
    
    
    
    class TestSub extends Test{//抽象クラスを継承
        int add(int a , int b){//add()メソッドを実装
            return a + b ;
        }
    }
    
    

    strictfp修飾子
    strictfpで宣言した場合は、そのクラスに含まれているメソッドコードが浮動小数点に関してIEEE754基準規則に準拠する事を意味する。この修飾子はメソッドにも使える。また、他の修飾子とも組み合わせ仕様できる。






    Copyright 2007 ためになるホームページ All Rights Reserved.