一、今天干了什么

多态强化学习:

对象的多态性:父类的引用指向子类的对象

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()的使用和重写