4.3 用户自定义类

4.3.1 一个Employee类
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());
	}

}

Employee.java
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 基于类的访问权限
一个类的方法可以访问该类中任何一个对象的私有域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值