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