一、Object类
1、 java.lang.object类
Object类是所有java类的根父类
如果在类声明中未使用extends关键字指明其父类,则默认父类为Object类。
2、方法
1)equals()方法
①只能处理引用类型变量;
②在object类中发现equals仍然比较的是两个引用类型的变量地址值是否相(this==obj);
③String类重写了object类中equals()方法,比较的是内容。
若我们自定义一个类,希望比较两个对象的属性值都相同的情况下返回true的话,就需要重写object类的equals()方法。
public boolean equals(Object obj){
if(this==obj){
return true;
}
if(obj instanceof Person){
Person p=(Person)obj;
if(this.name.equals(this.name)){
return true;
}else {
return false;
}
}
}
2)toString()方法
①当我们打印一个对象的引用时,实际上默认调用的就是这个对象的toString()方法;
②当我们没有重写Object类的toString()方法时,打印的就是对象所在的类,以及对象实体在堆空间的位置;
③一般我们需要重写Object类的toString()方法,将此对象的各个属性值返回。
例:public String toString(){
return "Order:orderId="+orderId+"Order:orderName="+orderName;
}
像String类、Date、File类、包装类都重写了toString()方法。
二、关于字符串
1、字符串是不可变的字符序列
String a1="abc";
a1.replace('a', 'm');
System.out.print(a1);//输出abc
2、若通过= 给字符串赋值,则字符串本身的值一样,即指的同一个对象
若用new的方式来赋值,则为不同的对象,指向不同的内存空间
String b="abc";
System.out.print(a1==b);//输出true
String c=new String("abc");
三、多态
1、父类类型的变量指向子类对象的引用称为多态。
2、多态存在的三个必要条件:要有继承、要有重写、父类变量引用子类对象。
3、多态的变现形式:相同类型的变量调用相同的方法却产生不一样的结果。
多态情形下只能调用父类的方法,而不能调用子类特有的方法,若想调用,则需要强制转换
Person p1=new Person();
① 向上转型:将子类对象转为父类对象
Person p2=new Man();
Person p3=new Women();
p1.walk();
p2.walk();//虚拟方法调用,调用的是子类重写的方法
p3.walk();
②向下转型:将父类对象转为子类对象,使用();
为了保证不报ClasscastException,向下转型时进行判断:instanceof
//若a是A类的实例,那么a也一定是A类的父类的实例
if(a instanceof A){
Man m=(Man)p2;//强转
m.work();
}