第9回 クラスの機能(1)

  
参考書 Lesson 9.1(参考書p.259)〜 Lesson 9.3
    
9 クラスの機能
 
 9.1 メンバへのアクセスの制限(参考書 p.260)
 
・メンバへのアクセスを制限する
 - クラスのメンバ(変数、メソッド)にアクセス制限を設定することができる 
 - メンバに想定外の操作や変更がされないようにして、安全性・信頼性を高める

privateメンバをつくる
 - privateメンバは自身のクラス内からしかアクセスできない (外部から直接アクセスができなくなる) 
 
<想定外の値を設定しようとする例>
class Car
{
     :
  double gas;
     :
}
class Sample1
{
  public static void main(String[] args)
  {
    Car car1 = new Car();
       :
    car1.gas = -10.0; // 不適切な値も代入できてしまう・・・
       :
  }
}
   
privateを設定した例>
class Car
{
     :
  private double gas; // privateメンバにする
     :
}
class Sample1
{
  public static void main(String[] args)
  {
    Car car1 = new Car();
       :
    car1.gas = -10.0; // コンパイルエラー、外部からのアクセスができなくなる
       :
  }
}
 
publicメンバをつくる
 - publicメンバは制限なしでアクセスが可能
 - Carクラスで、正しい値かをチェックした上で値を設定する
  
<メソッドを経由して、gasに値を設定する>
class Car
{
     :
  private double gas;
     :
  public void setGas( double g ) // g>=0であればgasに代入する
  {
    if( g >= 0.0 ){ // 適切な値だった
      gas = g;
    }else{
      System.out.println("【エラー】正の数値を設定してください。");
    }
  }
     :
}
class Sample1
{
  public static void main(String[] args)
  {
    Car car1 = new Car();
       :
    car1.setGas( -10.0 ); // 値の代入は拒否される
    car1.setGas( 20.5 ); // 値の代入は正常に行われる
       :
  }
}
   
・カプセル化のしくみを知る
 - アクセス制限の修飾子は3種類
   private, protected, public
   
 - 修飾子によるアクセスできる条件
アクセス修飾子
同じクラス
同じパッケージ
サブクラス
すべて
public

protected
×
指定なし
× ×
private
× × ×
              
    
  
 9.2 メソッドのオーバーロード
 
・オーバーロードのしくみを知る
 - 同じ名前のメソッドを、複数個定義すること
 - ただし、引数の型・個数は異なるものにする必要がある
  
<オーバーロード定義の例>
class Car
{
  private int num;
  private double gas;

  public void setCar( int n ){
     :
  }
  public void setCar( double g ){
     :
  }
  public void setCar( int n, double g ){
     :
  }
}
   
・オ―バーロードについての注意
 - 引数の違いのみが有効
 - メソッドの戻り値では区別できないので注意
   
   
 9.3 コンストラクタの基本
 
・コンストラクタのしくみを知る
・コンストラクタの役割を知る
 - オブジェクト(インスタンス)が作成されるときに、自動的に最初に実行されるメソッド
 - メソッド名はクラス名と同じにする必要がある
  
<コンストラクタで初期値を設定する例>
class Car
{
  private int num;
  private double gas;

  public Car(){ // Carクラスのコンストラクタ
    num = 4212;
    gas = 15.5;
  }
  int getNum(){ return num; } // numのゲッター(getter)
  double getGas(){ return gas; } // gasのゲッター
}

class Sample1
{
  public static void main(String [] args)
  {
    Car car1 = new Car(); // オブジェクトを作成

    System.out.println("ナンバーは " + car1.getNum() );
    System.out.println("ガソリン量は " + car1.getGas() );
  }
}

   
「Sample1」を実行する、以下のようになる
C:\java>java Sample1
ナンバーは 4212
ガソリン量は 15.5

C:\java>
 
 
  
  
 演習
 
  演習のページへ