目次
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() ; } }