zoukankan      html  css  js  c++  java
  • java之多态

    多态性:是面向对象中最重要的概念,在java中有两种体现:

    • 方法的重载和重写;
    • 对象的多态性--可以直接应用到抽象类和接口上;

    成员变量调用:

    Java的引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量使使用的类型决定,运行时类型由实际赋给该变量的对象决定。若编译时类型和运行时不一致,就会出现多态。 

    对象的多态性,在Java中,子类对象可以替代父类的对象引用:

    • 一个变量只能有一种确定的数据类型;
    • 一个引用类型变量可能指向(引用)多种不同类型的对象;
    • Perosn p = new Person();
      Person e = new Student();

    子类可以看作是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型。

    一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法:

    Student m = new Student();

    m.school =  "pku';//合法,Student类有school成员变量

    Person e = new Student();

    e.school = "pku";//不合法,Perosn类没有school成员变量

    属性是在编译时确定的,编译时e为Person属性,没有school成员变量,因此编译错误。

    虚拟方法调用:

    正常的方法调用:

    • Person p = new Person();
    • p.getInfo();
    • Student s = new Student();
    • s.getInfo();

    虚拟方法调用,多态情况下:

    • Perosn e = new Student();
    • e.getInfo();//调用Student类的getInfo方法

    编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法--动态绑定。

    总结:

    前提:

    • 需要存在继承或者实现关系;
    • 需要有覆盖操作;

    成员方法:

    • 编译时:查看引用变量所属的类中是否有所调用的方法;
    • 运行时:调用实际对象所属的类中重写的方法;

    成员变量:

    • 不具备多态性,只看引用变量所属的类。
  • 相关阅读:
    在同一asp.net website工程中引用app_code中定义的control
    perl中的ppm 安装包时,如果通过代理如何下载最新的包及离线安装的问题
    利用htc s900拨号上联通3G网
    转载一篇有关ramdisk 的使用的文章
    .net dataTable对象的处理性能
    TPlink 340G+设置外网访问内网机器
    C++中的const关键字(zz)
    存在 汪峰
    ETW (Event Tracing for Windows)介绍
    理解smart pointer之一(auto_ptr介绍)
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12049008.html
Copyright © 2011-2022 走看看