1. 面向对象特性之多态
定义:同一个行为,具有不同的多种表现形式 。
多态是继封装、继承之后,面向对象的第三大特性。
使用多态的前提条件
有以下几条:
继承或者实现【二选一】(接口和抽象类)
方法的重写【意义体现:不重写,无意义】
父类引用指向子类对象【格式体现】
1.1 多态的具体使用
- 着重理解----
前期绑定和后期绑定
。
/**
* java编程思想中:
*
* 针对行为
* 多态分成
* 前期绑定:编译时绑定,绑定是父类。
* 后期绑定:运行时绑定,绑定的是子类。
*
* 针对属性
* 不管是编译期间还是运行期间,他都认为自己是父类。
*
*
* 在使用多态的时候,注意点:
* 子类中有,但是父类中没有的方法,使用多态无法调用。
*
* 父类中有但是子类中没有的方法,使用多态是可以调用的。
*
*
* 使用多态调用子类的属性:
* 1.直接调用:无法实现:
* 2.间接调用:使用方法调用。
* Animal animal = new Dog();//自动向上转型
* Dog dog = (Dog) animal; //向下转型需要强转
* Cat cat = (Dog) animal; // java.lang.ClassCastException 类型转换异常。
* 因为创建的对象是一个狗的对象,但是却强转成了一只猫。不符合现实。
*/
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有的方法,必须做向下转型。
1.2 instanceof 关键字
判断某个对象是否属于某个类型。
子类型属于父类型。
源码分析:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }