方法调用,代码理解

时间:2013-09-04 02:05:43

标签: java

我在理解其中一个代码时遇到了问题。如果有人能帮我理解,我将非常感激。

Here is the question in Google Books

如果声明C:

会发生什么
 class C {
 void process1(char ch) {
       System.out.println ("Inside process1 in C " + ch);     }
 void process2(char ch) {
   System.out.println ("Inside process2 in C " + ch);     }
 void process3(char ch) {
   System.out.println ("Inside process3 in C " + ch);
   process2(ch);  }                                            
 }

之后是其扩展名的以下声明:

class ExtC extends C {
  void processl(int n) {
     System.out.println ("Inside process1 in ExtC " + n);    }
void process2(char ch) {
     System.out.println ("Inside process2 in ExtC " + ch);   }
void process4(int n) {
     System.out.println ("Inside process4 in ExtC " + n);    }
}

如果声明三个对象

,则调用哪些方法
 ExtC object1 = new ExtC( );
  C object2 = new ExtC( ), object3 = new ExtC( );

之后是这些陈述:

 object1.process1(1000);
 object1.process4(2000);
 object2.process1(3000);
 object2.process4(4000);
 object3.process1(‘P');
 object3.process2('Q');
 object3.process3('R');

问题3。

我意识到它会首先打印出来 1- ExtC 1000中的内部过程1 然后它会打印出来 2- ExtC 2000中的内部流程4

但是呢? object2和object 3会发生什么?我应该看一下Extend还是Class C?

1 个答案:

答案 0 :(得分:0)

你知道我们何时调用一个方法, 编译时检查由refference类型表示的类中的方法 并且在运行时它创建一个由对象类型表示的类的实例,并检查那里的方法。 这里所有3个对象都是ExtC class.ExtC类实际上有5个实例方法.process1(char ch),process2(char ch),process3(char ch),process1(int n),process4(int n): 来自其超级C的3。过程2(char ch)已被覆盖。

考虑object1,refference类型&对象类型都是ExtC.So我们可以调用所有这5个方法。 考虑object2,我们只能调用两个类中包含的方法,即由refference类型表示的类,'c'和amp;对象类型,'ExtC'。所以方法process1(int n)&无法调用process4(int n)。 考虑object3,我们只能调用Object类中包含的方法(由refferece表示)& ExtC类。因为不能调用那些5。 现在再试一次自己的答案。