`
nanjingjiangbiao_T
  • 浏览: 2600677 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

上海群硕软件公司的一道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了.
因为父类的引用无法访问子类独有的方法。



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics