您的位置:首页 > 其它

从一道SCJP 试题来看你对继承和多态的理解程度? (转csdn)

2004-12-16 10:25 811 查看
What is displayed when the following is executed?

class Parent{
private void method1(){
System.out.println("Parent's method1()");
}
public void method2()
{
System.out.println("Parent's method2()");
method1();
}
}

class Child extends Parent{
public void method1(){
System.out.println("Child's method1()");
}

public static void main(String args[]){

Parent p = new Child();
p.method2();
}

}

Choices:

a. Compile time error

b. Run time error

c. prints : Parent's method2()

Parent's method1()

d. prints : Parent's method2()

Child's method1()

答案是C

但是我们把题改一下,

class Parent{
private void method1(){
System.out.println("Parent's method1()");
}
public void method2()
{
System.out.println("Parent's method2()");
method1();
}
}

class Child extends Parent{
public void method1(){
System.out.println("Child's method1()");
}

public static void main(String args[]){

Child p = new Child();//改变了这里

p.method2();
}

}

应该选什么? 也是C!

我们再改一下:

class Parent{
public void method1(){ //change here
System.out.println("Parent's method1()");
}
public void method2()
{
System.out.println("Parent's method2()");
method1();
}
}

class Child extends Parent{
public void method1(){
System.out.println("Child's method1()");
}

public static void main(String args[]){

Parent p = new Child();
p.method2();
}

}

这次终于是答案D了,我们再改
:

class Parent{
public void method1(){ //change here
System.out.println("Parent's method1()");
}
public void method2()
{
System.out.println("Parent's method2()");
method1();
}
}

class Child extends Parent{
public void method1(){
System.out.println("Child's method1()");
}

public static void main(String args[]){

Child p = new Child();//change here
p.method2();
}

}

也是答案D,我这里是运行过的结果,可是不理解为什么,那个高手跳出来解释一下?

参考贴:
http://community.csdn.net/Expert/topic/3490/3490386.xml?temp=.3488581
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: