类和对象

标准JAVA库提供了几千个类,可以用于用户界面设计、日期日历和网络程序设计。
封装—数据隐藏,封装就试讲数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。数据成为实例域,操作数据的过程成为方法。对于每一个特定的对象都有一组对应的实例域值,这些值的集合就是这个对象的当前状态。只要向对象发出一个消息,它的状态就有可能发生改变。
实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。
在扩展一个已有的类时,这个扩展后的新类具有所扩展的类的全部属性和方法。在新类中只需提供使用适用于这个新类的新方法和数据域。通过扩展一个类来建立另一个类的过程称为继承。

  • 对象
    三个特性:

  • 对象的行为

  • 对象的状态

  • 对象的标识
    对象的行为时用可调用的方法定义的。每个对象都保存着描述当前特征的信息。这就是对象的状态。对象状态的改变必须通过调用方法实现。作为一个类的实例,每个对象的表示永远是不同的,状态也常常存在差异。
    类之间的关系

  • 依赖(ues-a)

  • 聚合 (has-a)

  • 继承 (is-a)
    类和对象

请看一段代码

package com.lzw.test;
import java.time.*;
//import java.util.Scanner;
public class Demo {

	public static void main(String[] args) {
		LocalDate date = LocalDate.now();//目前时间
		int month = date.getMonthValue();//
		int today = date.getDayOfMonth();
		
		date = date.minusDays(today-1);//本月首日
		DayOfWeek weekday = date.getDayOfWeek();
		int value =weekday.getValue();
		
		System.out.println("mon Tue Wen Thu Fri Sat Sun");
		for(int i =1;i<value;i++)
			System.out.print("    ");
		while(date.getMonthValue()==month) {
			System.out.printf("%3d",date.getDayOfMonth());
			if(date.getDayOfMonth()==today)
				System.out.print("*");
			else
				System.out.print(" ");
			date = date.plusDays(1);
			if(date.getDayOfWeek().getValue()==1)
				System.out.println();
		}
			if(date.getDayOfWeek().getValue()!=1)
				System.out.println();
	}

}

刚刚那段代码是在已有类下的操作,再看一个用户自定义类

package com.lzw.test;
import java.time.LocalDate;
//import java.time.*;
//import java.util.Scanner;
public class Demo {

	public static void main(String[] args) {
		Employee[] staff = new Employee[3];
		staff[0] = new Employee("Cracker Cracker",75000,1980,12,15);
		staff[1] = new Employee("Harry Hacker",50000,1989,10,1);
		staff[2]=new Employee("Tony Tester",40000,1990,3,15);
		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
{
	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);
	}
	public String getName() {
		return name;
	}
	public double getSalary() {
		return	salary;
	}
	public LocalDate getHireDay() {
		return hireDay;
	}
	public void raiseSalary(double byPercent) {
		double raise = salary*byPercent/100;
		salary+=raise;
	}
}

在这个示例中程序中包含两个类:Employee类和带有public访问修饰符的Employee Test 类。Employee类包含了main方法。
关键字public意味着任何类的任何方法都可以调用这些方法。
关键字private确保只有Employee类自身的方法能够访问这些实例域。