多态性

1、多态性是面向对象中的第三大主要特征,多态性是在继承性的基础之上扩展出来的概念。

2、在Java中多态性的两种实现模式:

方法的多态性:方法的重载,方法的覆写

对象的多态性:父子实例之间的转换处理,两种模式:(对象转型的处理属于多态性,这一特性必须在继承性的基础上实现)

|-对象向上转型:父类 父类实例 = 子类实例,自动完成转换(使用较多)

|-对象向下转型:子类 子类实例 = (子类)父类实例,强制完成转换(在使用子类特殊功能时使用)

6、实例之间的转换处理举例:

class Father {
    public void print() {
        System.out.println("父类");
    }
}
class Son extends Father {
    public void print() {
        System.out.println("子类");
    }
}
public class ZhuanXing {

    public static void main(String[] args) {
        Son son = new Son();
        son.print();        //输出结果:子类
    }

}

②向上转型(目的:对参数进行统一设计)

Father father = new Son();    //向上转型
father.print();    //输出结果:子类

用处:

public class ZhuanXing {

   public static void main(String[] args) {
        fun(new Son()); //相当于Father father = new Son();
    }
    public static void fun(Father father) { // 此时不管传递的是哪一个子类都能接收
        father.print();
    }

}

所以,使用向上转型的优点在于可以对参数进行统一设计。减少使用重载方法(给fun()函数多种参数)的代码量

③向下转型(使用子类的特殊功能)

Person per = new SuperMan() ;  //向上转型(正常状态下超人也是普通人)

SuperMan man = (SuperMan)per ; //向下转型

man.fly();

man.fire();

向下转型不安全,因为在发生对象的向下转型之前一定要先进行向上转型,否则会出现“ClassCastException”异常。

7、instanceof关键字

为了保证向下转型的正确性,需判断某个实例是否是某个类的对象,此时,使用instanceof语法实现:

对象 instanceof 类
Person per = new Person();

System.out.println(per instanceof Person);

返回true则指该实例是指定类对象。

应用:为保证向下转型的安全性,在向下转型之前先判断是否进行了向上转型
Person per = new SupperMan() ;

if(per instanceof SuperMan) {

    SuperMan man = (SuperMan)per ; //向下转型

    man.fly();

    man.fire();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值