4.3.1 一个Employee类
Employee.java
1、Java中最简单的类的定义形式为:
class ClassName {
constructor1
constructor2
...
method1
method2
...
field1
field2
...
}
注释:这类编码风格是类方法在前,域在后。这样有助于提升注重接口的概念,消减对实现的注意。(这是面向对象编程和面向过程编程思想上最大的区别)
2、(例4-2 源代码)
EmployeeTest.java
package com.vincent.javacore.employeetest;
public class EmployeeTest {
public static void main(String[] args) {
// 创建三个Employee对象
Employee[] staff = new Employee[3];
staff[0] = new Employee("Carl Cracker", 7500, 1987, 12, 15);
staff[1] = new Employee("Harry Hacker", 5000, 1989, 10, 1);
staff[2] = new Employee("Tony Tester", 4000, 1990, 3, 15);
// 每个人工资提升5%
for (Employee e : staff)
e.raiseSalary(5);
// 打印Employee的每个对象
for (Employee e : staff)
System.out.println("name: " + e.getName() + ", salsry: "
+ e.getSalary() + ", hirDay: " + e.getHireDay());
}
}
package com.vincent.javacore.employeetest;
import java.util.Date;
import java.util.GregorianCalendar;
public class Employee {
public Employee(String n, double s, int year, int month, int day) {
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public Date getHireDay() {
return hireDay;
}
public void raiseSalary(double byPercent) {
double raise = this.salary * byPercent / 100;
this.salary += raise;
}
private String name;
private double salary;
private Date hireDay;
}
注意:原文件名必须与public类的名字相匹配。在一个文件中,只能有一个公有类,可以有多个非公有类。
4.3.2 多个源文件的使用
将每个类单独放在一个文件中。
4.3.3 解析Employee类
1、Employee类包含了一个构造器和四个方法:
public Employee(String n, double s, int year, int month, int day)
public String getName()
public double getSalary()
public Date getHireDay()
public voic raiseSalary(double byPercnet)
public表示任何类任何方法都可以调用这些方法
2、三个实例域:
private String name;
private double salary;
private Date hireDay;
关键字private确保只有Employee类的方法才能调用这些实例域
3、其中name域是String类的对象,hireDay是Date类的对象。一个类通常会包含其他类的实例域。
4.3.4从构造器开始
初步了解要记住:
1、构造器名要与类名相同
2、每个类要有一个以上的构造器
3、构造器可以有0个或0个以上的参数
4、构造器没有返回值
5、构造器总是伴随new一起调用
警告:不要在构造器中定义与实例域重名的局部变量!!!
4.3.5 隐式参数和显式参数
每个方法中关键字this表示隐式参数。推荐用以下方式编写raiseSalary方法:
public void raiseSalary(double byPercent) {
double raise = this.salary * byPercent / 100;
this.salary += raise;
}
这样可以将实例域与局部变量明显的区分开。
4.3.6 封装的优点
需要获取或设定实例域的值时要提供萨斯你想内容:
1、一个稀有的数据域;
2、一个公有的访问器方法;
3、一个公有的更改器方法。
这样做的好处在于:
1、可以改变内部实现,除了该类的方法之外不影响其他代码;
2、更改器方法可以执行错误检查。
警告:不可以编写访问器方法所返回的引用是可变的!!!
4.3.7 基于类的访问权限
一个类的方法可以访问该类中任何一个对象的私有域。