vue项目接口域名动态的获取方法
292
2022-09-07
java多态中的就近原则介绍
直接上题:
题目补充:
class A {
int m; //-10
int getM() {
return m;
}
int seeM() {
return m;
}
}
class B extends A {
int m ; //10
intbkiStrAqmE 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+"bkiStrAqmE 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时,注意:要用到就近原则
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~