第4章 对象与类
4.1 面向对象程序设计
文章目录
类
类指定了如何构造对象。可以将类想象成制作小甜品的模具,将对象想象为小甜饼。
由一个类构造对象的过程称为创建这个类的一个实例
object 超类
封装
封装是将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现细节。
对象中的数据称为实例字段,操作数据的过程称为方法
类之间的关系
依赖:uses-a
聚合:has-a 包含关系
继承:is-a
4.3 自定义变量
package com.core.test04;
import java.time.LocalDate;
public class Employee {
//实例
private String name;
private double salary;
private LocalDate hireDay;
//构造器,与类同名
public Employee(String name, double salary,int year,int month,int day){
this.name = name;
this.salary = salary;
this.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;
}
}
从构造器开始
构造器与类同名
每个类可以由一个以上的构造器
构造器可以有0个、1个或多个参数
构造器没有返回值
构造器总是结合new操作符一起调用
用var声明局部变量
var harry = new Emplyee(“Harry Hacker”,50000,1989,10,1);
注:var关键字只能用于方法中的局部变量。参数和字段的类型必须声明
final实例字段
可以将实例字段定义为final。这样的字段必须在构造对象时初始化。必须确保在每一个构造器执行之后,这个字段的值已经设置,并且以后不能再修改这个字段。
final修饰符对于类型为基本类型或者不可变类的字段尤其有用。
4.4 静态字段与静态方法
静态字段
静态字段属于类,而不属于单个对象
eg:private static int nextId = 1;
public static final double PI = 3.14
属性:将对象变量升级成类变量,不用实例化,直接 类名.属性 使用,修饰属性时,属性名一般全部大写,多个单词之前用_
方法:将对象方法升级成类方法,不用实例化,直接 类名.方法() 使用
代码块:程序运行时,会直接优先级最高运行的代码
静态方法
静态方法是不操作对象的方法。
两种情况可以使用静态方法
方法不需要访问对象状态,因为它需要的所有参数都通过显示参数提供
方法只需要访问类的静态字段(例如Employee.advanceId)
工厂方法
类似LocalDate和NumberFormat的类使用静态工厂方法
4.5方法参数
一个方法不可能修改基本数据类型的参数,但是可以修改对象参数
方法不能让一个对象参数引用一个新对象
4.6对象构造
重载 overload
如果多个方法有相同的方法名但有不同的参数
4.7 记录
记录时一种特殊形式的类,其状态不可变,而且公共可读。
一个记录的实例字段称为组件
对于完全由一组变量表示的不可变数据,要使用记录而不是类
public Employee(double yearSalary){ //重写
this.yearSalary = yearSalary;
}
//记录
record Point(double x,double y){
public double distanceFromOrigin(){return Math.hypot(x,y);}
}