java多态中的就近原则介绍

 更新时间:2021年12月23日 14:13:06   作者:踏过山河,踏过海  
大家好,本篇文章主要讲的是java多态中的就近原则介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

直接上题:

在这里插入图片描述

题目补充:

class A {
    int m;                     //-10
    int getM() {
        return m;
    }
    int seeM() {
        return m;
    }
}
class B extends A {
    int m ;                      //10
    int getM() {
       // System.out.println(this.m+"............"+super.m);
        return m+10;
    }
}
public class Test {
    public static void main(String args[]) {
        B b = new B();                               //先找B,B没有再找A,找A的时候,就要注意:就近原则了
        b.m = 10;
        //此刻,A类的m为0,B类的m为10
        System.out.println("b.seeM():"+b.seeM());
        System.out.println("b.getM():"+b.getM());//20

        A a = b;                                  //把b符给a这样创建对象的方法,还是先找B,B没有再找A,找A的时候,就要注意:就近原则了
        //此刻,A类的m仍为0,B类的m仍为10
        System.out.println("...................................");
        System.out.println("a.seeM():"+a.seeM());
        System.out.println("a.getM():"+a.getM());
        System.out.println("...................................");

        a.m = -10;//A只能改自己的m,不能改B的m,所以
        //此刻,A类的m为-10,B类的仍m为10

        System.out.println("b.getM():"+b.getM());//20   b始终调用重写后的getM()方法
        System.out.println("a.getM():"+a.getM());//b.getM()是20,后来把b赋给a,a也成了20     20
        //b调用的getM()方法是重写之后的getM()方法,所以是10+10

        System.out.println("a.seeM():"+a.seeM());
        System.out.println("b.seeM():"+b.seeM());//此时不管是a的m还是b的m都是-10            -10
        System.out.println("a.m:"+a.m+"   b.m:"+b.m);
        System.out.println("a.getM():"+a.getM());
        //因为b自己没有seeM方法,所以b在使用seeM方法时,是用的父类A的seeM方法,根据就近原则,b在调用seeM方法时是使用的A.m的-10
        //所以,b通过seeM()方法看到的是m是a的m
    }
}

在这里插入图片描述

判断成员变量的方法\技巧其实很简单:

只需要:

确定当前这个类 调用的成员方法 是先找谁?

=>如果先找父类,找就完事了

=>如果先在子类,子类找到了要用的方法,那就用;

如果没找到,还要去父类里面去找要用到的方法,注意,这时就要使用就近原则

所以,关键有二:

一,确定先找谁?先找父类还是先在子类

eg:以上面的题为例:

B b = new B();//子类B, 子类 方法找完还 没找到 时,还要父类 里面找

A a = b;//注意这种 : 还是 子类B, 子类 方法找完还 没找到 时,还要父类 里面找

A a = new A();//这个时候,父类A,但 父类 方法找完还没找到时,不会再找 子类 了!

二,当从子类B找到父类A时,注意:要用到就近原则

到此这篇关于java多态中的就近原则介绍的文章就介绍到这了,更多相关java多态就近原则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Eclipse 安装 SVN 在线插件教程

    Eclipse 安装 SVN 在线插件教程

    这篇文章主要介绍了Eclipse 安装 SVN 在线插件教程的相关资料,这里对安装步骤进行了详细介绍,需要的朋友可以参考下
    2016-11-11
  • mybatis 遍历foreach中or拼接的操作

    mybatis 遍历foreach中or拼接的操作

    这篇文章主要介绍了mybatis 遍历foreach中or拼接的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 解决spring boot 1.5.4 配置多数据源的问题

    解决spring boot 1.5.4 配置多数据源的问题

    下面小编就为大家带来一篇解决spring boot 1.5.4 配置多数据源的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java中文件的操作与输入输出流举例详解

    Java中文件的操作与输入输出流举例详解

    Java语言的输入输出功能是十分强大而灵活的,下面这篇文章主要给大家介绍了关于Java中文件的操作与输入输出流的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • java实现的满天星效果实例

    java实现的满天星效果实例

    这篇文章主要介绍了java实现满天星效果的方法,涉及Java绘图的应用,非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • 利用宝塔配置jdk环境的详细图文教程

    利用宝塔配置jdk环境的详细图文教程

    最近在宝塔面板上创建一个网站,为Java应用程序提供运行环境,所以下面这篇文章主要给大家介绍了关于利用宝塔配置jdk环境的详细图文教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • Mybatis动态sql超详细讲解

    Mybatis动态sql超详细讲解

    动态SQL是MyBatis的强大特性之一,顾名思义就是会动的SQL,即是能够灵活的根据某种条件拼接出完整的SQL语句,下面这篇文章主要给大家介绍了关于Mybatis动态sql的相关资料,需要的朋友可以参考下
    2023-04-04
  • Java instanceof用法详解及实例代码

    Java instanceof用法详解及实例代码

    这篇文章主要介绍了Java instanceof用法详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • mybatis如何通过接口查找对应的mapper.xml及方法执行详解

    mybatis如何通过接口查找对应的mapper.xml及方法执行详解

    这篇文章主要给大家介绍了利用mybatis如何通过接口查找对应的mapper.xml及方法执行的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • SpringBoot中使用redis做分布式锁的方法

    SpringBoot中使用redis做分布式锁的方法

    这篇文章主要介绍了SpringBoot中使用redis做分布式锁的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09

最新评论