三大特殊类
- String类
- Object类
- 包装类
Object类:
----Object类是所有类的父类,所有类默认继承Object类.
(接收所有类的对象)
class Person{ }
class Student{ }
public class Test{
public static void main(String[] args) {
fun(new Person());
fun(new Student());
}
public static void fun(Object obj){
System.out.println(obj);
}
}
I.toString():取得对象信息
- System.out.println()系统输出对象时,默认会调用该对象的toString()方法.
(因为所有类都是Object类的子类,Object提供的toString方法) - 若自定义类需要进行内容输出,需要覆写toString()方法。
(方法覆写:不能拥有比父类更为严格的访问控制权限)
举例:
class Person{
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
//覆写toString()方法
public String toString(){
return "姓名为:"+this.name+",年龄为:"+this.age;
}
}
public class Test{
public static void main(String[] args) {
Person per = new Person("张三",20);
String str = "hello";//系统提供的String类
fun(per);//调用fun接收Per
fun(str);//调用fun接收str
}
public static void fun(Object obj){ //通过Object类接收
System.out.println(obj.toString()); //调用toString方法
}
}
//为何String类调用会输出内容,而Person类确输出的不是内容
//原因在于toString(取得对象信息)
II.equals():比较两个对象内容*
- Object类提供的equals:默认比较两个对象的地址是否相同
举例:
以下代码**两个判断,一个比较,三步走 **
class Person{
private String name;
private int age;
public Person(){}
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name ;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String toString(){
return "姓名为:"+this.name+",年龄为:"+this.age;
}
@Override
public boolean equals(Object obj) {
//**1.判断地址是否相同**
if(obj == this){
return true;
}
//2.**判断传进来的值是否是(指向)Person对象**
if( !(obj instanceof Person)){
//instanceof(当前引用能否指向Person类)向上向下转型
//取反,传进去的不是Person对象;
return false;
}
//3**.此时需要比较两个Person对象的内容
//需要向下转型转回Person对象后比较两者的属性内容**
Person per = (Person) obj;
return this.age == per.age //先比属性值
&& this.name.equals(per.name);
}
}
public class Test {
public static void main(String[] args) {
Person per1 = new Person("张三", 20);
Person per2 = new Person("张三", 20);
Person per3 = new Person("张三", 22);
System.out.println(per1.equals(per2));
System.out.println(per2.equals(per3));
}
}
运行结果:
III.Object类可以接收所有引用类型,包括接口与数组
举例:
interface IMessage{
void getMsg();
}
class MessageImpl implements IMessage{
public void getMsg(){ }
}
public class Test {
public static void main(String[] args) {
IMessage msg = new MessageImpl();
Object obj1 = msg;
int[] data = new int[10];
Object obj2 = data;
System.out.println(obj1);
System.out.println(obj2);
}
}