14. 面向对象特性之多态

1. 面向对象特性之多态

定义:同一个行为,具有不同的多种表现形式

多态是继封装、继承之后,面向对象的第三大特性。使用多态的前提条件有以下几条:

  • 继承或者实现【二选一】(接口和抽象类)
  • 方法的重写【意义体现:不重写,无意义】
  • 父类引用指向子类对象【格式体现】
1.1 多态的具体使用
  1. 着重理解----前期绑定和后期绑定
/**
 * java编程思想中:
 *
 *  针对行为
 *      多态分成
 *          前期绑定:编译时绑定,绑定是父类。
 *          后期绑定:运行时绑定,绑定的是子类。
 *
 *  针对属性
 *      不管是编译期间还是运行期间,他都认为自己是父类。
 *
 *
 *  在使用多态的时候,注意点:
 *      子类中有,但是父类中没有的方法,使用多态无法调用。
 *
 *      父类中有但是子类中没有的方法,使用多态是可以调用的。
 *
 *
 *  使用多态调用子类的属性:
 *      1.直接调用:无法实现:
 *      2.间接调用:使用方法调用。
 *  Animal animal = new Dog();//自动向上转型
 *  Dog dog = (Dog) animal; //向下转型需要强转  
 *  Cat cat = (Dog) animal; // java.lang.ClassCastException  类型转换异常。
 * 因为创建的对象是一个狗的对象,但是却强转成了一只猫。不符合现实。
 */

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有的方法,必须做向下转型。

1.2 instanceof 关键字
  1. 判断某个对象是否属于某个类型。

  2. 子类型属于父类型。

  3. 源码分析:

        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;
        }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值