package javalearning;
import java.time.LocalDate;
public class EmployeeTest {
public static void main(String[] args) {
//使用new操作符構造Employee[]數組對象。staff這個 對象變量必須使用構造器初始化後才能使用
//也就是Employee存放在堆中,而staff這個對象變量引用存放在棧中,=的意思是將對象變量staff指定的地址和Employee對象綁定在一起
Employee[] staff = new Employee[3];
//對數組對象進行實例化
//對於每個特定的類實例(對象)都有一組特定的實例域值。這些值的集合就是這個對象的當前狀態 ( state )
staff[0] = new Employee("lili", 700, 1993, 12, 15);
/*例如:使用上面這句new Employee("lili", 700, 1993, 12, 15);
* 會將實例域(對象中的數據)設置爲
* name = "lili";
* salary = 700;
* hireDay = LocalDate.of(1993,12, 15);
*/
staff[1] = new Employee("max", 100, 1998, 12, 15);
staff[2] = new Employee("jiating", 750, 1987, 12, 15);
//對對象調用方法改變其行爲(behavior),如果不調用方法,對象的狀態是不會改變的
for (Employee e : staff)
e.raiseSalary(5);
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getsalary() + ", hireDay=" + e.gethireDay());
}
}
class Employee {
// 3個實例域用來存放將要--操作的數據--,對象中的數據稱爲實例域( instance field ), 操縱數據的過程稱爲方法( method )
//關鍵字 private 確保只有 Employee 類自身的方法能夠訪問這些實例域
//爲什麼不能不使用public申明實例域呢?這是因爲public數據域允許程序中的任何方法對其進行讀取和修改。 這就完全破壞了封裝。
private String name;
private double salary;
private LocalDate hireDay;
// 父類構造器
public Employee(String n, double s, int year, int month, int day) {
name = n;
salary = s;
hireDay = LocalDate.of(year, month, day);
}
/*
* name 是一個只讀域。一旦在構造器中設置完畢, 就沒有任何一個辦法可以對 它進行修改,這樣來確保 name 域不會受到外界的破壞。
*/
public String getName() {
return name;
}
//雖然 salary 不是隻讀域,但是它只能用 raiseSalary 方法修改
public double getsalary() {
return salary;
}
public LocalDate gethireDay() {
return hireDay;
}
//將調用這個方法的對象的salary實例域設置爲新值,新值爲通過該方法得到的salary值
//raiseSalary方法中有兩個參數
//第一個爲隱式參數,是出現在方法名前實例域salary;一般使用this.salary來區分實例域和局部變量raise
//第二個爲顯示參數,位於方法名後面括號中的數值double byPrecent,即後者出現在方法的聲明中
public void raiseSalary(double byPercent) {
double raise = this.salary * byPercent / 100;
this.salary += raise;
}
}
class Manger extends Employee{
//子類構造器
public Manger(String n, double s, int year, int month, int day) {
super(n, s,year, month, day);
}
}
從EmployeeTest深入理解類對象和構造器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.