我在理解其中一个代码时遇到了问题。如果有人能帮我理解,我将非常感激。
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?
答案 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。 现在再试一次自己的答案。