2006年12月24日 星期日

建構式

撰寫類別 (class) 的時候,通常會設定許多屬性
但如果類別的方法經常要用到這些屬性 (類別變數) 呢?
能不能一次設定好呢?
當然可以…
就是使用建構式了。
//建立建構式
public Account(int number, String name, double balance){
 this.number = number;
 this.name = name;
 this.balance = balance;
}

//建構式也可以多載
public Account(int number, String name){
 this.number = number;
 this.name = name;
}
參見上述範例。

公開與私用
寫 class 的時候要不要公開類別?
通常,屬性要加上 private 避免被其他程式使用;
Account a = new Account(101,"Simon",200);
a.withdraw(1000); //方法有檢查的程式,不會扣成複數
a.show();

a.balance = a.balance - 1000; //外部程式試圖改變屬性的值
a.show();
程式在執行的時候,如果屬性是 "封裝" 的,
就能保護變數不會被執行範圍外的程式,
而扣到不合理的負數。
完整程式如下
//屬性,且被保護
private int number;
private String name;
private double balance;

//建立建構式
public Account(int number, String name, double balance){
 this.number = number;
 this.name = name;
 this.balance = balance;
}

//建構式也可以多載
public Account(int number, String name){
 this.number = number;
 this.name = name;
}

//公開的方法
public void setNumber(int number) {
 this.number = number;
}

public
void deposit(double amount) {
 this.balance = this.balance + amount;
}

public boolean withdraw(double amount) {
 if (this.balance >= amount) {
  this.balance = this.balance - amount;
  System.out.println("提款成功");
  return true;
 }
 else {
  System.out.println("您的餘額不足,提款未執行");
  return false;
 }
}

public void show() {
 System.out.println("Number: " + this.number);
 System.out.println("Name: " + this.name);
 System.out.println("Balance: " + this.balance);
}
於是我們了解什麼是 public 和 private,與其主要功能

沒有留言: