zoukankan      html  css  js  c++  java
  • 多态的总结

    对于多态,可以总结以下几点:

    一、使用父类类型的引用指向子类的对象;
    二、该引用只能调用父类中定义的方法和变量;
    三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
    四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

    另转载:

    多态是通过:
    1 接口 和 实现接口并覆盖接口中同一方法的几不同的类体现的
    2 父类 和 继承父类并覆盖父类中同一方法的几个不同子类实现的.

    一、基本概念

    多态性:发送消息给某个对象,让该对象自行决定响应何种行为。
    通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。

    java 的这种机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。

    1. 如果a是类A的一个引用,那么,a可以指向类A的一个实例,或者说指向类A的一个子类。
    2. 如果a是接口A的一个引用,那么,a必须指向实现了接口A的一个类的实例。

    如果是父类引用指向子类对象这种形式,有以下几种情况:

    如果子类重写了父类的某个方法,那么此时调用的是子类重写的方法

    如果子类没有重写父类的某个方法,那么此时调用的是父类中的方法

    如果子类新增了父类中不存在的方法,那么这个父类引用是不能调用这个仅在子类中存在的方法中,因为子类对象自动向上转型为了父类对象

    如果子类与父类有同名的成员变量和静态变量,那么由于子类自动向上转型为父类对象,此时调用father.a,那么输出的必然是父类的成员变量和静态变量,这里不存在子类覆盖父类同名变量这一说,因为这里本身可以看做是一个父类对象

    如果是Son son=new Son(),那么这就是实实在在的一个子类对象,那么son.a和son.b,这样就会覆盖父类的同名变量,输出的是子类的成员变量a和静态成员变量b,如果子类中没有同名变量,那么son.a和son.b调用的是父类的a和b。换句话说,也就是子类可以继承父类的成员变量和静态变量,同时可以覆盖父类的成员变量和静态变量

  • 相关阅读:
    第3章 Activity的生命周期
    掌握jQuery插件开发,这篇文章就够了
    第22章 Master-Detail 用户界面
    JavaScript动画1-速度动画
    Compass学习指南
    Compass中导入Normalize
    Sass学习指南
    BASIC-2 01字串
    leetocode题解
    机器学习算法的sklearn实现
  • 原文地址:https://www.cnblogs.com/narojay/p/10812632.html
Copyright © 2011-2022 走看看