- 一、封装
- 二、类之间的关系
- 三、更改器方法vs访问器方法
- 四、举例 Employee类的分析
- 隐式参数(implicit)和显式参数(explicit)
- 访问器方法
- 五、静态字段与静态方法
内容不全,主要记录自己认为不够熟练的点 一、封装
定义:把数据和方法包装进类中,并对具体实现进行隐藏
类是基本的封装单元,一个类的所有对象实例有相同的封装特性
“具体实现” 包括:对象的数据域、方法实现以及非接口方法的定义等
对数据的完全隐藏是对象的理想结构, 现实中使用public、protected、private关键字实现4种隐藏能力(访问权限)
-
依赖 uses-a
如果一个类的方法使用或操纵另一个类的对象,我们就说一个类依赖于另一个类 -
聚合(包含) has-a
类A的对象包含类B的对象 -
继承 is-a
特殊类和一个一般类之间的关系
类A扩展类B,类A不但包含从类B继承的方法,还会有一些额外的功能
三、更改器方法vs访问器方法- 访问器方法只访问对象而不修改对象
LocalDate newYear=LocalDate.of(2000,1,1);
LocalDate aThousandDaysLater=newYear.plusDays(1000);
//不更改newYear的日期 而是将新日期返回给aThousandDaysLater变量
- 修改器方法显然相反~~
import java.time.LocalDate;
public class learnClass {
public static void main(String[] args) {
Employee[] staff=new Employee[3];
staff[0]=new Employee("Carl Cracker",75000,1987,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;
}
}
隐式参数(implicit)和显式参数(explicit)
上述代码的raiseSalary方法中,salary为隐式参数,也可以 写作this.salary
byPercent为显式参数,显式地列在方法声明中。
getName… 使得name成为一个只读字段,一旦在构造器中设置,就没有任何办法可以对它进行修改。使得salary字段只能用raiseSalary方法修改。
五、静态字段与静态方法- 静态字段
静态字段又称为类字段。
private static int nextID=1;
一个类只有一个静态字段 属于类而不属于对象(可以想象成n个对象 共享1个静态字段)
- 静态方法
静态方法是不在对象上执行的方法。例如,Math类的pow方法就是一个静态方法。表达式Math.pow(x,a)会计算幂。在完成运算是,它并不使用任何Math对象,换句话说,它没有隐式参数。 可以认为静态方法是没有this参数的方法。
可以使用静态方法:
- 方法不需要访问对象状态,所有参数都通过显式参数提供
- 方法只需要访问类的静态字段



