直接上题:

题目补充:

class A {int m;                     //-10int getM() {return m;}int seeM() {return m;}
}
class B extends A {int m ;                      //10int 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为10System.out.println("b.seeM():"+b.seeM());System.out.println("b.getM():"+b.getM());//20A a = b;                                  //把b符给a这样创建对象的方法,还是先找B,B没有再找A,找A的时候,就要注意:就近原则了//此刻,A类的m仍为0,B类的m仍为10System.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为10System.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+10System.out.println("a.seeM():"+a.seeM());System.out.println("b.seeM():"+b.seeM());//此时不管是a的m还是b的m都是-10            -10System.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多态里面的就近原则相关推荐

  1. java中的就近原则、方法中值传递和引用传递的区别、什么是构造方法、this关键字用法、什么是封装

    你知道java中的就近原则嘛? package com.Test.java; /*** * 在java里面有一个"就近原则"详情可以参照下面代码**/public class Ac ...

  2. java的就近原则啥意思_java就近原则浅析

    先看下面的例子 public class Test6就近原则 { public static void main(String[] args) { A a = new A(); B b = new B ...

  3. 【笔记】Java中使用变量的规则(使用变量,遵循就近原则)、成员变量和局部变量的区别

    文章目录 一.使用变量的规则 二.成员变量和局部变量的区别 一.使用变量的规则 最终输出的是"小黑正在努力学习" 使用变量,遵循就近原则 例:将上述代码敲一遍 Student部分 ...

  4. java基础学习 day28(就近原则,this关键字,构造方法,标准Javabean类)

    1. 成员变量和局部变量: 成员变量:变量定义在方法外,类里 局部变量:变量定义在方法里 2. 就近原则: 当成员变量名与局部变量名一致时,若使用这个名字,使用的是离这个调用位置最近的变量(如果局部变 ...

  5. 面向对象、封装、就近原则及this关键字

    面向:拿.找: 对象:能干活的东西: 面向对象编程:拿东西过来做对应的事: 即,分别找对应的"对象"完成对应的"事件".因此学习内容包括: ①学习各种已存在的对 ...

  6. java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...

    Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...

  7. java 多态判断非空_收藏Java 面试题全梳理

    脚本之家 你与百万开发者在一起 来源 | Java建设者(ID:javajianshe) 作者 |cxuan 如若转载请联系原公众号 Java 基础篇 Java 有哪些特点 并发性的:你可以在其中执行 ...

  8. java多态的实现_Java多态的实现机制是什么,写得非常好!

    作者:crane_practice www.cnblogs.com/crane-practice/p/3671074.html 2019-06-13 08:46:00 Java多态的实现机制是父类或接 ...

  9. 面向对象软件设计原则【JAVA】(开闭原则、里氏代换、依赖倒转、接口隔离、迪米特法则、合成复用原则)

    软件设计原则[JAVA](开闭原则.里氏代换.依赖倒转.接口隔离.迪米特法则.合成复用原则) 1.开闭原则 2.里氏代换原则 3.依赖倒转原则 4.接口隔离原则 5.迪米特法则 6.合成复用原则 1. ...

最新文章

  1. sqlite3 改源代码支持上下键查询历史命令
  2. centos 使用mutt发送邮件带附件
  3. python 远程控制_用 Python 远程控制你的电脑
  4. ZZULIOJ 1090: 整数幂(多实例测试)
  5. macOS下使用gcc编译GLUT+CPP的连接语句
  6. Android调试系列之dumpsys命令
  7. 测试需求分析第一部分
  8. 电脑 运行中 主板喇叭 警报声_网络资讯:电脑电源线是什么
  9. Win2008r2 由ESXi 转换到 HyperV的处理过程
  10. BZOJ 3192: [JLOI2013]删除物品 奇淫技巧树状数组
  11. LINUX下载编译Which
  12. 手摸手教你阅读和调试大型开源项目 ZooKeeper
  13. ios 手游SDK 开发教程
  14. matlab单频噪声,基于MATLAB有噪声语音信号处理
  15. 正则表达式匹配以xx开头以xx结尾
  16. 云打印SDK来袭,支持飞鹅云,芯烨云,易联云,优声云等云打印机
  17. vba实现简单的数据排序和颜色统计
  18. 用java写修改器_一些修改器1
  19. certbot申请通配符域名证书
  20. 贝勒大学计算机专业,详细介绍美国贝勒大学之计算机科学

热门文章

  1. docker网络设置(网桥)
  2. 软考证书电子版下载地址和软考成绩查询
  3. 一篇文章让你从JAVA零基础入门`OOP`编程12.20
  4. 赶工读文章(2)— Radar-Camera Sensor Fusion for Joint Object Detection and Distance Estimation in AV
  5. 坚持跑步1个月,有效果了
  6. RMXP脚本解析(二十二):Game_Enemy
  7. 百度网盘登陆科创板,真能值400亿吗?很有可能
  8. mplayer音乐软件_MPlayer音乐播放器项目讲解
  9. 手推式洗地机什么牌子好?洗地机品牌排行榜
  10. 在农村干什么挣钱,小加工让你快速致富