上海群碩軟件公司的一道Java筆試題
原題地址:點擊查看
要求是寫出結果,并說明為什么。
據回憶程序是這樣的:
package org;

public class Test
{

public static void main(String[] args)
{
A a = new B();
a.print();
}

}

class A
{
private int i = 1;
public A()
{
int i = 2;
}
public void print()
{
System.out.println("The result is:" + i);
}
}

class B extends A
{
private int i = 3;
public B()
{
int i = 6;
}
public void print()
{
System.out.println("The result is:" + i);
}
}
輸出結果是:3
此題考查的是多態.
在這里是父類的引用指向子類的對象.
父類的引用只能訪問子類和父類共有的
方法.
這個程序我通過Eclipse和Debug程序觀察它的
執行順序是這樣的:
package org;

public class Test
{

public static void main(String[] args)
{
A a = new B();
a.print();
}

}

class A
{
//3
private int i = 1;
//2
public A()
{
//4
int i = 2;
}
public void print()
{
System.out.println("The result is:" + i);
}
}

class B extends A
{
//5
private int i = 3;
//1
public B()
{
//6
int i = 6;
}
public void print()
{
System.out.println("The result is:" + i);
}
}
現在將程序稍微改動一下:
package org;

public class Test
{

public static void main(String[] args)
{
A a = new B();
a.print();
}

}

class A
{
//3
private int i = 1;
//2
public A()
{
//4
int i = 2;
}
public void print()
{
System.out.println("The result is:" + i);
}
}

class B extends A
{
//5
private int i = 3;
//1
public B()
{
//6
int i = 6;
}
public void print2()
{
System.out.println("The result is:" + i);
}
}
這時輸出結果就是1了.
因為父類的引用無法訪問子類獨有的方法.
要求是寫出結果,并說明為什么。
據回憶程序是這樣的:










































此題考查的是多態.
在這里是父類的引用指向子類的對象.
父類的引用只能訪問子類和父類共有的
方法.
這個程序我通過Eclipse和Debug程序觀察它的
執行順序是這樣的:















































現在將程序稍微改動一下:















































這時輸出結果就是1了.
因為父類的引用無法訪問子類獨有的方法.