java-类的多态和多重继承

类的多态
多态意为一个名字可具有多种语义,在程序语言中,多态性是指"一种定义,多种实现",类的多态性可以从两个方面体现,一是方法的重载,二是类的上下转型。
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);//调用父类方法
}
}

可以看到,定义方法是形参是 四边形类型,调用的地方传入参数类型为平行四边形类型,平行四边形其实也是种四边形
所以可以把平行四边形对象看作是一个四边形对象,就是把子类对象赋值给父类类型的变量,这种技术叫做“向上转型”

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个接口中的方法

猜你喜欢

转载自www.cnblogs.com/hup666/p/10416107.html