3. equals()方法与toString()方法
3.1 toString()方法
作用:就是为了简化对对象的属性的打印输出。
/**
* 重写toString():简化对对象的打印输出
*/
@Override
public String toString() {
// 一般我们在成员方法中使用成员变量时,都会带this关键字。
return "汽车品牌:" + this.brand + ",汽车颜色:" + this.color + ",价格为:" + this.price + ",轮子数:" + this.wheels;
}
@Test
public void test02(){
Car car = new Car("奔驰", "黑色", 4, 600000);
car.start();
car.run();
car.stop();
// 调用重写的toString()方法
System.out.println(car);
}
3.2 equals()方法
作用:就是定义我们自己对对象的比较规则。此时,需要重写的是父类Object的equals()方法。
/**
* 重写equals():定义比较对象的内容是否相等。
* 定义比较对象的规则。
*/
@Override
public boolean equals(Object obj) {
Car car2 = (Car) obj;
return this.brand.equals(car2.brand) &&
this.color.equals(car2.color) &&
this.price == car2.price &&
this.wheels == car2.wheels;
}
@Test
public void test03(){
Car car1 = new Car("奔驰", "黑色", 4, 600000);
Car car2 = new Car("奔驰", "黑色", 4, 600000);
// boolean b = car1 == car2; // 不能使用==,两个==比较的是内存地址
/**
* 因为没有重写父类Object类的equals方法,所以仍然使用Object中的equals方法,即:
* public boolean equals(Object obj){
* return (this == obj);
* }
*/
boolean b = car1.equals(car2);
System.out.println(b);
}
4. 访问修饰符
Java中的访问修饰符共有四种:
private、protected、default、public
4.1 private
私有的访问修饰符,代表只能在当前类的内部可以访问,简称为:类内有效
4.2 protected
受保护的,代表只能在父子类的继承关系中存在,子类可以访问父类定义的由protected修饰的字段或熟悉或方法。它不受包的限制,也就是说,子类与父类即使不在同一个包中,只要你父类实用类protected,子类都可以访问它们,其访问权限比包的访问权限更高,所以,可简称为:父子类有效 + 同一个包下非父子类有效
4.3 default
默认访问修饰符,实际上是什么都不写。这种访问修饰权限代表只要在包的内部都可以互相访问,简称为:包内有效
4.4 public
公有的访问修饰符,可以在任何地方访问,具有最高的访问修饰权限。简称为:任何位置有效
访问修饰权限由高到低排列如下:
public > protected > default > private
画图表示如下:
修饰符 | 当前类 | 同一包类 | 父子类(同一个包) | 其他包(父子类) | 使用范围 |
---|---|---|---|---|---|
public | √ | √ | √ | √ | 类、接口、变量、方法 |
protected | √ | √ | √ | √ | 变量、方法、不能修饰外部类 |
default | √ | √ | √ | × | 类、接口、变量、方法 |
private | √ | × | × | × | 变量、方法、不能修饰外部类 |
5. 包
包的作用: 实际上包起的作用就是为了区分同名类。相当于Windows系统中的文件夹。
5.1 包的定义
一般地,Java中包名使用的是所在公司域名的反向写法,一般都是小写。如:com.baidu.crm.login
格式为:公司所在域名的方向形式 + 项目名 + 模块名
定义: 放在除注释外的第一行,由package定义。package com.hzit.book.xxx
命名:
1、反向公司域名:com.hzit
2、项目名:book
3、模块名:base
4、功能命:pojo/dao/service/controller
最终完整的包名:
com.hzit.book.base
.pojo
.dao
.service
.controller
5.2 包的引入
1、在Java中定义包使用package
关键字。并且要注意的是,package只能放在除注释外的第一行。
2、如果需要引入一个包的类,使用语法为:import 包名+类名。如:import java.util.Scanner
。
3、使用import可以一次引入某个包中的一个类,也可以一次引入多个类,使用*,如:import java.util.*
,代表一次可以引入指定的java.util
包中的所有正在使用的类。
如果使用了*
号,代表对指定包中的所有正在使用的类进行引入,而这个行为,不会增加当前正在编译的文件的大小,也不会影响程序运行效率,只会增加编译的时间。
5.3 访问不在同一个包中的同名类
package com.hzit.test;
import com.hzit.entity.Person;
public class TestPerson {
@Test
public void test05(){
// 通过import导入了com.hzit.entity下的Person类,可以简化
Person person = new Person();
// 访问其他包中的同名类,必须要写类的完全限定名(包含包名)
com.hzit.book.entity.Person person1 = new com.hzit.book.entity.Person();
}
}