点击这里成为作者 · 更新于 2017-11-22 20:00:55

基础程序题

题目一

    class Base{}

    class Agg extends Base{
        public String getFields(){
            String name = "Agg";
            return name;
        }
    }

    public class Avf{
        pulic static void main(String argv[]){
            Base a = new Agg();
            //here
        }
    }

下面哪个选项的代码替换到//here会调用getFields方法,使出书结果是Agg

    A. System.out.println(a.getFields());
    B. System.out.println(a.name);
    C. System.out.println((Base)a.getFields());
    D. System.out.println(((Agg)a).getFields());

答案 D

Base 类要引用 Agg 类的实例需要把 Base 类显示地转换成 Agg 类,然后调用 Agg 类中的方法. 如果 a 是 Base 类的一个实例,是不存在这个方法的,必须把 a 转换成 Agg 的一个实例

题目二

    class A{

        public A(){
            System.out.println("A");
        }
    }

    public class B extends A{

        public B(){
            System.out.println("B");
        }

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

输出结果是 A B A

题目三

    class A{
        public void print(){
            System.out.println("A");
        }
    }

    class B extends A{
        public void print(){
            System.out.println("B");
        }
    }

    public class Test{
        ..
        B objectB = new B();
        objectB.print();

        A as = (A) objectB;
        as.print();

        A asg = objectB;
        asg.print();

        as = new A();
        as.print();
        ..
    }

输出为 B B B A

题目四

    public class Test {
        public static void main(String[] args){
            Father father = new Father();
            Father child = new Child();
            System.out.println(father.getName());
            System.out.println(child.getName());
        }
    }

    class Father{
        public static String getName(){
            return "Father";
        }
    }

    class Child extends Father{
        public static String getName(){
            return "Child";
        }
    }

输出是 Father Father 因为这里的方法 getName 是静态的. 具体执行哪一个,则要看是由哪个类来调用的.

上一篇: 基础概念题 下一篇: super 关键词