zoukankan      html  css  js  c++  java
  • 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);//调用父类方法
    }
    }

        可以看到,定义方法是形参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个接口中的方法

  • 相关阅读:
    MVVM架构~knockoutjs实现简单的购物车
    Thrift架构~目录
    WebApi系列~在WebApi中实现Cors访问
    WebApi系列~基于RESTful标准的Web Api
    MVVM架构~目录
    IOS设计模式学习(20)命令
    MySQL保留关键字
    Eclipse with C++: "Launch failed. Binary not found."
    HTML5 Canvas鼠标与键盘事件
    通过openssh远程登录时的延迟问题解决
  • 原文地址:https://www.cnblogs.com/hup666/p/10416107.html
Copyright © 2011-2022 走看看