java专项练习第一天

从今天开始,为了更深入的理解java语言,从题目出发,以解决问题为契机深入学习java,直到练完java专项练习的1200道题目,查漏补缺。

错题1: new B().getValue()问题
阅读下面一段代码,写出代码执行结果:

package day01;
public class Text01 {
    public static void main(String[] args) {
        System.out.println(new B().getValue());
    }
    static class A{
        protected int value;
        public A(int v){
            setValue(v);
        }
        public void setValue(int value)
        {
            this.value=value;
        }
        public int getValue()
        {
            try{
                value ++;
                return value;
            }finally{
                this.setValue(value);
                System.out.println(value);
            }
        }
    }
    static class B extends A{
        public B()
        {
            super(5);
            setValue(getValue()-3);
        }
        public void setValue(int value)
        {
            super.setValue(2*value);
        }
    }
}

如果我们就看着上面的代码来推出结果,很容易陷入误区,很容易弄混运行的方法到底是A的还是B的。

我思考后的稳妥思路:其实说到底这个题目的关键还是B继承了A且重写了A的部分方法,我们实例化B实际上是运行B中的方法,于是,我们可以将继承后的类B近似的看成下面代码:

static class B{
  protected int value;
  public B(){
   setValue(5);
   setValue(getValue()-3);
   }
public void setValue(int value)
{
 this.value=2*value;
}
public int getValue()
{
try{
    value++;
    return value;
}finally{
 this.setValue(value);
 System.out.println(value);
}

答案是22,34,17
这样我们的理解就会容易很多。

你可能感兴趣的:(JAVA题库练习分析)