📜  Java程序的输出| 18(重写Override)

📅  最后修改于: 2020-03-19 13:13:19             🧑  作者: Mango

先决条件: 用Java覆盖
1)以下程序的输出是什么? 

class Derived
{
    protected final void getDetails()
    {
        System.out.println("派生类");
    }
}
public class Test extends Derived
{
    protected final void getDetails()
    {
        System.out.println("测试类");
    }
    public static void main(String[] args)
    {
        Derived obj = new Derived();
        obj.getDetails();
    }
}

a)派生类
b)测试类
c)运行时错误
d)编译错误

答案:(d)
说明:最终和静态方法不能被重写哦。

2)以下程序的输出是什么? 

class Derived
{
    public void getDetails(String temp)
    {
        System.out.println("派生类 " + temp);
    }
}
public class Test extends Derived
{
    public int getDetails(String temp)
    {
        System.out.println("测试类 " + temp);
        return 0;
    }
    public static void main(String[] args)
    {
        Test obj = new Test();
        obj.getDetails("GFG");
    }
}

a)派生类GFG
b)测试类GFG
c)编译错误
d)运行时错误
答案。(c)

说明:覆盖方法必须具有相同的签名,包括参数列表和返回类型。有关详细信息,请参见:Java中的重写
3)以下程序的输出是什么?

class Derived
{
    public void getDetails()
    {
        System.out.println("派生类");
    }
}
public class Test extends Derived
{
    protected void getDetails()
    {
        System.out.println("测试类");
    }
    public static void main(String[] args)
    {
        Derived obj = new Test();  // line xyz
        obj.getDetails();
    }
}

a)测试类
b)由于行xyz导致的编译错误
c)派生类
d)由于访问修饰符导致的编译错误
答案:(d)
说明:覆盖方法不能具有更多的限制性访问修饰符。

4)以下程序的输出是什么?

import Java.io.IOException;
class Derived
{
    public void getDetails() throws IOException //line 23
    {
        System.out.println("派生类");
    }
}
public class Test extends Derived
{
    public void getDetails() throws Exception //line 24
    {
        System.out.println("测试类");
    }
    public static void main(String[] args) throws IOException //line 25
    {
        Derived obj = new Test();
        obj.getDetails();
    }
}

a)第23行引起的编译错误
b)第24行引起的编译错误
c)第25行引起的编译错误
d)以上都是
答案。(b)
说明:重写方法抛出的异常不应是新的或更广泛的异常类。在上面的代码中,Exception是比IOException更广泛的检查异常类,因此这会导致编译错误。

5)以下程序的输出是什么?

class Derived
{
    public void getDetails()
    {
        System.out.printf("派生类 ");
    }
}
public class Test extends Derived
{
    public void getDetails()
    {
        System.out.printf("测试类 ");
        super.getDetails();
    }
    public static void main(String[] args)
    {
        Derived obj = new Test();
        obj.getDetails();
    }
}

a)测试类派生类
b)派生类测试类
c)编译错误
d)运行时错误
答案。(a)
说明:super关键字用于从子类中显式调用重写的方法。