多态引用问题2

Java对象实例化过程中的多态引用问题

一,多态引用问题(按照注释序号1,2,3…进行阅读)

package com.hzc.questions;

/**
 * @author flowerWorm
 * @createTime 2021年11月27日 01:21:00
 * 多态引用问题2
 * 执行对象实例化过程中遵循多态特性,调用的方法都是实例化子类中的重写方法,只有明确调用了super.xxx关键词或者说子类中没有该方法时,才会去调用父类的该方法
 */
public class Base2 {
    public static void main(String[] args) {
        System.out.println(new B().getValue());//1,进入main方法 //17,new B().getValue()方法执行,由于子类并没有getValue方法,则直接调用父类的该方法即可 //25,new B().getValue()返回17,输出
    }

    static class A {
        protected int value;
        public A(int v){
            setValue(v);//3,调用子类的setValue(5)方法,传入一个5,返回一个10
        }
        public void setValue(int value) {
            this.value = value;//5,this.value=10    //11,this.value=22  //16,this.value=16  //22,this.value=34
        }
        public int getValue() {
            try {
                value++;//7,子类中并没有getValue()方法,所以这里直接调用父类的getValue()方法,此时的value=10,value++=11   //18,此时value=16,value++=17
                return value;//8,return 11,不过得在finally代码块执行结束后才回返回11    //13,将之前保存的return 11给return回去   //19,return 17,不过得在finally代码块执行结束后才回返回11    //24,将之前保存的return 17给return了
            }finally {
                this.setValue(value);//9,有finally先执行finally中的代码块,再返回try中的return去,此时的value=11,这里用this调用子类重写过的setValue(11)方法  //20,调用子类的setValue(17)方法
                System.out.println(value);//12,输出value,此时value=22   //23,输出value,此时value=34
            }
        }
    }

    static class B extends A {
        public B() {
            super(5);//2,调用父类的含参构造函数
            setValue(getValue() - 3);//6,调用getValue()方法,可以看到子类中并没有该方法,则调用父类的该方法 //14,getValue()方法执行完毕,返回1,则调用子类的setValue(11-3)方法
        }
        public void setValue(int value){
            super.setValue(2 * value);//4,调用super,setValue(2 * 5)方法 //10,再次进入该方法,传进来的形参value=11,则调用父类的setValue(2*11) //15,再次进入该方法,此时的形参value=8,所以此刻调用父类的setValue(2*8)方法 //21,调用super(2*17)
        }
    }
}

运行结果 : 22 34 17

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值