欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

java多态中的就近原则介绍

时间:2022-07-17 09:14:56|栏目: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代码

下一篇:没有了

本文标题:java多态中的就近原则介绍

本文地址:http://www.codeinn.net/misctech/208108.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有