-4

我对理解其中一个代码有疑问。如果有人能帮助我理解它,我将不胜感激。

这是 Google 图书中的问题

如果 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。

我意识到它将首先在 ExtC 1000 中打印 1- 内部进程 1 然后它将在 ExtC 2000 中打印 2- 内部进程 4

但那又如何呢?object2 和 object 3 会发生什么?我应该看Extend还是Class C?

4

1 回答 1

0

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

考虑object1,引用类型和对象类型都是ExtC。所以我们可以调用所有这5个方法。考虑object2,我们只能调用两个类中包含的方法,即引用类型,'c'和对象类型,'ExtC'表示的类。所以方法process1(int n)和process4(int n)可以' t 被调用。考虑 object3,我们只能调用包含在 Object 类(由引用表示)和 ExtC 类中的方法。所以不能调用这 5 个方法。现在再次尝试自己寻找答案。

于 2013-09-04T03:02:13.750 回答