类的多态
多态意为一个名字可具有多种语义,在程序语言中,多态性是指"一种定义,多种实现",类的多态性可以从两个方面体现,一是方法的重载,二是类的上下转型。
1 方法的重载
概念:
就是在同一个类中允许同时存在一个以上的同名方法,只要这些方法的参数个数或类型不同或顺序不同即可,
2 对象向上转型
//四边形 class Quadrangle { public static void draw() { //dosomething } }
//平行四边形 public class Parallelogram extends Quadrangle { public static void main(String args[]) { //实例化平行四边形 Parallelogram p = new Parallelogram(); draw(p);//调用父类方法 } }
可以看到,定义方法是形参p是 四边形类型,调用的地方传入参数类型为平行四边形类型,平行四边形其实也是种四边形
所以可以把平行四边形对象看作是一个四边形对象,就是把子类对象赋值给父类类型的变量,这种技术叫做“向上转型”
3 对象向下转型
将抽象类型转换为较具体的类型,这样的转型通常会出现问题,例如 不能说四边形是平行四边形的一种,所有的鸟都是鸽子。
//四边形 Quadrangle q = new Parallelogram (); //将父类对象赋予子类对象 Parallelogram p = q;
此时会发生异常,会发生编译器错误,
解决办法:
需要告知编译器这个四边形就是平行四边形,将父类对象强制转换为某个子类对象,这种方式称为显示类型转换。
Quadrangle q = new Parallelogram (); //四边形
//将父类对象赋予子类对象,并强制转换为子类型
Parallelogram p = (Parallelogram )q;
4 instanceof 关键字
向下转型前,先使用该关键字判断父类对象是否为子类对象的实例,防止发生ClassCastException 异常
语法格式如下:
myobject instanceof ExampleClass
myobject: 某类的对象引用
ExampleClass: 某个类
如果返回true,说明myobject 对象为ExampleClass 的实例对象,反之则不是
//四边形 Quadrangle q = new Quadrangle (); //判断父类对象是否为Parallelogram 子类的一个实例, if(q instanceof Parallelogram ) { // 进行向下转型操作 Parallelogram p = (Parallelogram) q; }
多重继承
类不允许多重继承,但接口允许多重继承,一个类可以同时继承多个接口
class implements interface1,interface2
注意:
使用多重继承时,可能出现变量或方法名冲突的情况,解决该问题时,如果变量冲突,则需要指定变量的接口,
即通过“接口名.变量”实现,而如果出现方法冲突时,则只需要实现一个方法即可。
接口继承接口
interface1 extends interface2
class TestA implements interface1
则TestA必须同时实现 interface1,interface2 2个接口中的方法