第四章 对象与类
LocalDate类
不要使用构造器来构造LocalDate类的休想,实际上是使用了静态工厂方法(factory method),它会代表我们时调用构造器。
LocalDate originalDate = LocalDate.now();
LocalDate的plusDay方法会生成一个新的LocalDate对象,并没有将originalDate改为1000后的日期,元对象不做任何改动。
LocalDate newDate = originalDate.plusDays(1000);
只访问对象而不修改对象的方法称为访问器方法(accessor method),例如LocalDate.getYear
与LocalDate的plusDay方法不同的, GregorianCalendar.add方法是一个更改器方法(mutator method), 调用这个方法后,对象的状态会改变。如:
GregorianCalendar someDay = new GregorianCalendar(2022,11,11);
someDay.add(Calendar.DAY_OF_MONTH,1000); // someDay对象被改变
final实例字段
final实例字段必须在构造对象时初始化,必须确保在每一个构造器执行之后,这个字段的值已经设置,并且以后不能再修改这个字段。final对于类型为基本类型或者不可变类的字段尤为重要,例如String就是不可变的。对于可变的类使用final修饰的话,会造成混乱。例如以下例子: final关键字只是表示存储在evaluations变量中的对象引用不会再指向另一个不同的StringBuilder对象。不过这个对象可以更改。
privat final StringBuilder evaluations;
evaluations= new StringBuilder();
public void getGoldStar(){
evaluations.append(LocalDate.now() + "Gold star!";
}
静态字段和静态方法
非静态对象的实例字段,每个对象都会有自己的一个副本。而静态字段属于类,而不属于任何以单个对象。
静态常量,如果省略关键字static,就需要通过类的一个对象来访问该变量。
静态方法是不在对象上执行的方法,例如:Math.pow(x,a)
方法参数
Java程序设计语言对对象采用多个是不是按引用调用,实际上,对象引用是按值传递的。
方法参数能做什么不能做什么:
1. 方法不能修改基本数据类型的参数(数值型或者布尔型)
2. 方法可以改变对象参数的状态
3. 方法不能让一个对象参数引用一个新的对象。
第五章
多态
public class Employee{ //父类
}
public class Manager extends Employee{ //子类
}
子类对象 【new Manager()】 可以赋值给为父类变量【Employee emp】,父类对象不可以赋值为子类变量。
Employee emp = new Manager(); //正确
Manager manager = new Employee(); //错误
在子类对象赋值给父类变量后,可以通过强制转型,转型回来。
Employee emp = new Manager();
Manager emp = (Manager) emp;
书本中原代码理解:
// 书中原代码
Manger boss = new Manager(...);
Employee[] staff = new Employee[3];
// 子类对象[new Manager(...)]赋值给为父类变量[staff[0]]
staff[0] = boss;
staff[1] = new Employee(...);
staff[2] = new Employee(...);
// 强制转换
Manger boss = (Manager) staff[0]; // ok
Manger boss = (Manager) staff[1]; // error