面试对象你真的明白吗?
来源:互联网 发布:php的进程 编辑:程序博客网 时间:2024/04/30 03:20
public class Test {public static void main(String[] args) {A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); //调用的顺序是 //this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O) //输出:A and A //先找A中的show没有show(b)的方法,再找super.show(b),A没有父类, //再继续找this.show((super)b),由于b继承了A,这里就找到了所以这里调用了A的show(A)方法 System.out.println(a1.show(b)); //输出:A and A //同样,先找A中的show没有show(c)的方法,再找super.show(c),A没有父类, //再继续找this.show((super)c),由于c继承了B,而B继承了A,所以这里还是调用了a的show(a) System.out.println(a1.show(c)); //输出:A and D //同样,先找A中的show没有show(d)的方法,再找super.show(d)这里就已经找到了 System.out.println(a1.show(d)); //输出:B and A //先找A中的show没有show(b)的方法,再找super.show(b),A没有父类, //再继续找this(a2).show((super)b),由于b继承了A,这里就找到了所以这里调用了A的show(A)方法 //a2.show(b),a2是一个引用变量,类型为A,则this为a2,b是B的一个实例,于是它到类A里面找show(B obj)方法, //没有找到,于是到A的super(超类)找,而A没有超类,因此转到第三优先级this.show((super)O), //this仍然是a2,这里O为B,(super)O即(super)B即A,因此它到类A里面找show(A obj)的方法, //类A有这个方法,但是由于a2引用的是类B的一个对象,B覆盖了A的show(A obj)方法,因此最终锁定到类B的show(A obj),输出为"B and A”。 System.out.println(a2.show(b)); //输出:B and A System.out.println(a2.show(c)); //输出:A and D System.out.println(a2.show(d)); //输出:B and B System.out.println(b.show(b)); //输出:B and B //b.show(c),b是一个引用变量,类型为B,则this为b,c是C的一个实例, //于是它到类B找show(C obj)方法,没有找到,转而到B的超类A里面找,A里面也没有, //因此也转到第三优先级this.show((super)O),this为b,O为C,(super)O即(super)C即B, //因此它到B里面找show(B obj)方法,找到了,由于b引用的是类B的一个对象,因此直接锁定到类B的show(B obj),输出为"B and B”。 System.out.println(b.show(c)); //输出:A and D System.out.println(b.show(d));}}class A {public A(){System.out.println("new A");}public String show(D obj) {//System.out.println("A:"+this.getClass().getName());return ("A and D");}public String show(A obj) {//System.out.println("A1:"+this.getClass().getName());return ("A and A");}}class B extends A {public B(){System.out.println("new B");}public String show(B obj) {//System.out.println("B:"+this.getClass().getName());return ("B and B");}public String show(A obj) {//System.out.println("B1:"+this.getClass().getName());return ("B and A");}}class C extends B {public C(){super();//System.out.println("C:"+super.getClass().getName());}}class D extends B {}
2 1
- 面试对象你真的明白吗?
- 你真的明白吗?--Java对象以及对象引用
- JDBC是什么,你真的明白吗?
- 你真的明白数据结构的List吗?
- Android MVC模式你真的明白了吗??
- Android MVC模式你真的明白了吗??
- 关于java的++和--操作符,你真的搞明白了吗?
- 创业,你真的明白“优化”和“赶时间”的真正概念吗?
- 创业,你真的明白“优化”和“赶时间”的真正概念吗?
- 你真的搞明白Java中基本数据类型的转换了吗?
- 你真的明白斯卡布罗集市歌词的真正含义吗?
- 「基础」C#中的继承,重载,委托,你真的弄明白了吗?
- ++ 与 -- 你真的弄明白了吗?不防进来看看!!!
- 你真的明白别人说什么了?
- 你是否真的明白Duble与double
- Python自动化面试必备 之 你真明白装饰器么?
- Python自动化面试必备 之 你真明白装饰器么?
- 【Android面试】关于post你真的了解吗?
- MySQL处在高负载环境下
- TCP/IP、Http、Socket的区别
- 黑马程序员——黑马学习日志之十五 IO流(四)
- mysql更新语句中的safe_mode
- 这是第一年。
- 面试对象你真的明白吗?
- UITableView
- cpu占用,解决Apache出现的CPU高占用率的问题
- 黑马程序员——黑马学习日志之十六 GUI
- UITableView
- unity3d中网格导入文件的两种类型
- Netstat命令详解 netstat命令怎样使用
- 高并发下的一些优化经验
- Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap