多态
多态性的基本概念
在Java之中对于多态又两种实现模式:
方法的多态性:
-方法的重载: 方法名相同、参数类型不同、参数个数不同、返回值相同
同一个方法名可以根据传入的参数的类型和个数的不同实现不能功能的执行
-方法的覆写:同一个方法可能根据使用子类的不同有不同的实现;
对象的多态性:父子实例之间的转换处理,他有两种模式:
--对象向上转型:父类 父类实例 = 子类实例、自动完成转换;
--对象向下转型: 子类 子类实例 =(子类) 父类 父类实例
大部分都是向上转型(90%)
对于对象的向下转型,往往是在使用子类的特殊功能(子类可以对父类进行功能扩充)的时候,要采用向下转型(3%),还有一些时候是不需要使用转型的(7%,比如Srting类)
对象转型:属于多态,这一特性必须在继承性的基础上实现;
观察简单代码:
向上转型:(接收或者返回参数的统一性)
向上转型这种操作的主要用途:不管传递的是哪一个子类都可以用message接受,向上转型的主要特点在于可以对参数进行统一的设计
对象向下转型:需要使用子类自己的特殊定义处理。
向下转型不安全
instanceof 关键字
判断某个实例是否属于某个类的对象,
语法: 对象 instanceof 类
改判断返回boolean类型,如果时true实例时指定类对象
不转型 向上转型在以后进行一些完善性的程序开发的过程之中,对于转型之前一定要使用instanceof判断
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
但是instanceof在Java的编译状态和运行状态是有区别的:
在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。
在运行状态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。