Java学习第二十天
一、今天干了什么
多态强化学习:
对象的多态性:父类的引用指向子类的对象
Person p = new Man(); //Man为Person的子类
1.当调用子类和父类同名同参数的方法时,实际执行的是子类重写父类的方法(虚拟方法调用)
注意:不能调用子类特有的方法、属性。
有了对象的多态性之后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时只能调用父类中的属性和方法。子类特有的属性和方法不能调用。
2.如何调用子类特有的属性和方法?
Man m1 = (Man) p; //向下转型:使用强制类型转换符
注意:使用强制类型转换的时候可能会报错:ClassCastException。为了避免,引入了instanceof关键字
3.instanceof关键字
a instanceof A:判断对象a是不是A的实例。如果是,返回true;如果不是,返回false。返回false就不能向下转型了
如果a instanceof A返回true,则a instanceof B也返回true,其中B为A的父类
4.使用向下转型时的常见问题(以下几种都不行):
(1)编译时通过,运行时不通过:
Person p = new Person();
Man m = (Man) p;
(2)编译通过,运行也通过:
Object obj = new Man();
Person p = (Person) obj;
(3)编译不通过(注意右边必须是左边的子类或者是同类型):
Man m = new Woman();
String str = new Date();
二、明天干什么
了解Object类及其使用、equals()的使用和重写