对象转型、Object类、多态
任务
1. Object 类
2. 多态
3. 向上转型
4. 向下转型
教学目标
1. 掌握Object类中的方法
2. 掌握多态
3. 向上转型
4. 向上转型
第一节: Object类
类Object是类层次结构的根类。每个类都使用Object作为超类。
1.1 equals()方法
指示其他某个对象是否与此对象“相等”。
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1==s2);//new表示在堆中开辟新的空间存储数据,双等号比较的是new出来的两块对内存
System.out.println(s1.equals(s2));//String类中重写了equals方法,比较的是两个字符串内容是否相等
1.2 hashCode()方法
返回该对象的哈希码值。每一个对象的哈希码值唯一
Object obj1 = new Object();
Object obj2 = new Object();
Object obj3 = obj2;
//obj2与obj3两个对象的哈希码值一样
System.out.println(obj1.hashCode());
System.out.println(obj2.hashCode());
System.out.println(obj3.hashCode());
1.3 getClass()方法
返回此Object的运行时类。通过某个对象通过反射获取类。
Object obj = new Object();
Class cls = obj.getClass();//通过反射获取到了Object类
1.4toString()方法
返回该对象的字符串表示。可以在自定义类中重写toString方法,以实现是对象转成指定格式的字符串。
public class Person{
String name;
public Person(String name){
this.name = name;
}
//重写toString方法
public String toString(){
return "name="+name;
}
}
public class DemoPerson{
public static void main(String[]args){
Person p = new Person("张三");
System.out.println(p);//输出结果为:name=张三
}
}
第二节: 多态
2.1 什么是多态
一个事物有多种表现形态
对象的多种形态,方法的多样性。
2.2 向上转型,向下转型
向上转型:将子类的引用赋值给父类引用,自动转换
String str = "abc"; Object obj = str;向下转型:将父类的引用赋值给子类引用,强制转换
Object obj = new String("abc"); String str = (String)obj;
2.3 instanceof
对象向下转型时,存在一个问题:
若一个父类A的引用a,指向一个子类B的实例,将a赋值给另一个子类C引用时,会抛出java.lang.ClassCastException异常;
抛出异常后程序将不能继续向下执行,为了避免这个异常的抛出,我们可以通过instanceof关键字判断引用指向的实例是否可以进行强制转换成某个子类对象
已知Animal类有两个子类Dog和Cat:
public class Demo{
public static void main(String[]args){
Animal a = new Dog();
check(a);
}
//设计一个方法,判断一个动物是猫还是狗
public static void check(Animal a){
if(a instanceof Dog){
System.out.println("狗");
}else if(a instanceof Cat){
System.out.println("猫");
}
}
}
2.4 多态的体现
对象的多态:
父类引用指向子类实例
接口引用指向实现类实例
方法的多样性:方法名相同,执行不同
方法的重写:子类中对父类继承来的方法进行完善
方法的重载:方法名相同参数列表不同