向下转型的使用
示例(强制转换):
Person p2= new Man();
Man m2=(Man)p2;
强制转换的分析:
地址有两部分:类型+@+具体地址
m1和p2的类型不同,@和具体地址相同,由于m1是Man类型,所以可以调用子类的属性和方法
但强制类型转换有时会出问题
Person p2= new Man();
Woman m2=(Woman)p2;
这样会出现ClassCastException异常
instanceof关键字
a instance of A
判断对象a是否是A的实例,如果是,返回true,否则返回false。
if(p2 instanceof Woman){
Woman w1=(Woman)p2;
w1.goShopping();
System.out.println("woman");
}
这样就能避免强制类型转换出现的异常了。
- 如果B是A的父类,则
a instance of A
返回true,则a instance of B
也返回true。 - 不相关的两个类不能强转
- 向下转型用的很少
“==”对于引用数据类型来讲,比较的是引用数据类型的地址值是否相同
ps:
1.若子类重写了父类的方法,就意味着子类的方法彻底覆盖了父类的方法,系统不可能把父类的方法转移到子类中
2.若子类和父类有重名的实例变量,子类的实例变量也不可能覆盖父类的实例变量,编译运行都看左边
Object类的使用
- Object类是所有类的根父类
- 如果类的声明中没有用extend关键字,则默认它的父类是Object类
- Object类中的功能(属性、方法)具有通用性
- Object类只声明了一个空参构造器