前言
Java中的Object类,是所有类的父类,其中定义了常用的方法,部分方法需要重写才可以正常使用。本文介绍了当我们创建了一个类时,常见的需要重写的方法及作用
get/set方法
- 为了达到封装的目的,通常将实体类中的属性设置为private,但是有时候需要外部的类对这个类所创建的对象中的属性值进行修改,此时需要使用get方法获取属性值,set方法修改属性值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class User { private String username; private String password;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; } }
|
toString方法
- 当需要输出对象中的属性时,需要调用toString方法,但是Object类默认的toString方法会输出对象的内存地址,所以通常在使用toString方法之前要重写Object提供的toString方法
- print方法在执行时,会自动调用该对象的toString方法
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class User implements Cloneable {
private String username; private String password;
@Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
|
clone方法
- 当创建一个类的对象时,想要克隆与前一个对象一模一样的对象时,不是使用
=
,而应该使用clone方法,因为=
会将内存地址赋值给新的变量,而不是创建类新的一模一样的对象
- 使用clone前要先将类实现Cloneable接口,然后重写clone方法
1 2 3 4 5 6 7 8 9 10
| public class User implements Cloneable {
private String username; private String password;
@Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } }
|
- 使用clone方法时,返回的类型为Object类型,所以需要强制类型转换
- 使用clone方法时要注意处理异常
1 2 3 4
| public static void main(String[] args) throws CloneNotSupportedException { User userOld = new User(); User userNew = (User) userOld.clone(); }
|
equals/hashCode方法
- 当需要比对两个对象是否相同时,应该使用equals方法,而不是
=
,因为=
会比对两个对象的内存地址,而不是所有属性的值
- 在使用equals方法之前需要重写hashCode方法和equals方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class User {
private String username; private String password;
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(username, user.username) && Objects.equals(password, user.password); }
@Override public int hashCode() { return Objects.hash(username, password); } }
|
1 2 3 4 5
| public static void main(String[] args) { User user1 = new User(); User user2 = new User(); boolean result = user1.equals(user2); }
|
完成