java多态中的就近原则介绍
直接上题:
文章图片
题目补充:
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()); //20b始终调用重写后的getM()方法System.out.println("a.getM():"+a.getM()); //b.getM()是20,后来把b赋给a,a也成了2020//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多态中的就近原则介绍】到此这篇关于java多态中的就近原则介绍的文章就介绍到这了,更多相关java多态就近原则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Java超详细讲解抽象类的原理与用法
- Python中的//符号是什么意思呢
- 在android中的视图中插入视图
- 如何创建WhatsApp中的项目分隔符()
- Android - 使用纯Java而不是XML创建应用程序()
- 如何使用Android自定义视图中的属性设置调整膨胀布局的大小()
- 在android studio中删除重构xml中的空格行
- 高级Java类教程(类重载指南)
- JavaScript的Promise(带有示例的教程)
- SpringBoot + Mybatis + MySQL,java.lang.IllegalStateException(无法加载ApplicationContext)