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