目次
Java オブジェクト指向 カプセル化
概要
オブジェクト指向のカプセル化について、簡単な事例をまとめます。
カプセル化の目的
重要な変数やメソッドは、他のクラスやメソッドから安易にアクセスされない様に保護する
隠蔽(カプセル)化の方法
・変数とメソッドのアクセス拡張子をprivate にすると クラス外部からのアクセスが禁止されます ・引数で変数を受けてクラス内でメソッドを実行します
事例
ヒューマンのクラス ・名前を付ける事ができる ・歩数を指定すると、歩数分歩く 例: Human が、3歩あるいた時 walk ...(Human) ・足跡の形を変える事ができる
ソースコード
外部からアクセス可能なクラス
// java_object_0310.java
class cHuman {
  public String name = "Human" ;
  public int cWalk = 20 ;
  public String sWalk = "." ;
  public cHuman(String n ) {
      this.name = n;
  }
  public void Walk() { 
      String s = "";
      for(int i = 1; i < this.cWalk; i++ ) {
        s += this.sWalk ;
      }
      System.out.print("Walk\t" ) ;
      System.out.println( s + "(" + this.name + ")" );
    }
}
class subMain {
  public subMain(){
    cHuman h = new cHuman("Human"); 
    h.cWalk = 10 ;
    h.Walk();
  }
}
class Java_object_0310 {
  public static void main ( String[] args ) {
    subMain root = new subMain() ;
  }
}
外部アクセス禁止したクラス
// java_object_0320.java
class cHuman {
  private String name = "Human" ;
  private int cWalk = 20 ;
  private String sWalk = "." ;
  public cHuman(String n ) {
      this.name = n;
  }
  private void Walk() {
      String s = "";
      for(int i = 1; i < this.cWalk; i++ ) {
        s += this.sWalk ;
      }
      System.out.print("Walk\t" ) ;
      System.out.println( s + "(" + this.name + ")" );
    }
}
class subMain {
  public subMain(){
    // List<String> humanList = Arrays.asList("Nao*","Itsu*","Moto*","Re*" ); 
    cHuman h = new cHuman("Human"); 
    h.name = "Nao*" ;
    h.Walk();
  }
}
class Java_object_0320 {
  public static void main ( String[] args ) {
    subMain root = new subMain() ;
  }
}
カプセル化した時のアクセス方法
メソッド内部で、変数やメソッドを呼び出すメソッドを作成します。
  // name を書き換える
  public void setName(String n ) {
      this.name = n;
  }
  // name を読み出す
  public String getName(String n ) {
      return this.name ;
  }
  // Walk を実行する
  public void setWalk(String s , int c){
      this.cWalk = c ;
      this.sWalk = s ;
      this.Walk()  ;
  }
アクセスする為のメソッドを呼び出します
// 呼び出しメソッド
    h.setName("Nao*") ;
    h.setWalk("*" , 15);
全体のソースコード
// java_object_0330.java
class cHuman {
  private String name = "Human" ;
  private int cWalk = 20 ;
  private String sWalk = "." ;
  
  public cHuman(String n ) {
      this.name = n;
  }
  // name を書き換える
  public void setName(String n ) {
      this.name = n;
  }
  // name を読み出す
  public String getName(String n ) {
      return this.name ;
  }
  // Walk を実行する
  public void setWalk(String s , int c){
      this.cWalk = c ;
      this.sWalk = s ;
      this.Walk()  ;
  }
  
  private void Walk() {
      String s = "";
      for(int i = 1; i < this.cWalk; i++ ) {
        s += this.sWalk ;
      }
      System.out.print("Walk\t" ) ;
      System.out.println( s + "(" + this.name + ")" );
    }
}
class subMain {
  public subMain(){
    cHuman h = new cHuman("Human"); 
    h.setName("Nao*") ;
    h.setWalk("*" , 15);
  }
}
class Java_object_0330 {
  public static void main ( String[] args ) {
    subMain root = new subMain() ;
  }
}
		
	