java继承和多态的试题分析

  • Post author:
  • Post category:java


java继承和多态的试题分析

第一题:写出下面题目的运行结果

  • 题目:
    interface A{}
    class B implements A {
        public String func() {
            return "func";
        }
    }
    class Demo {
        public static void main(String[] args) {
            A a=new B();
            System.out.println(a.func());
        }
    }
  • 答案:
  • 分析:题目中只有 A a=new B(),并没有向下转型,接口中没有定义func()函数,所以不能调用,什么都不能输出。

第二题:写出程序结果

  • 题目:
    class Fu {
        boolean show(char a){
            System.out.println(a);
            return true;
        }
    }
    class Demo extends Fu {
        public static void main(String[] args) {
            int i=0;
            Fu f=new Demo();
            Demo d=new Demo();
            for(f.show('A'); f.show('B')&&(i<2);f.show('C')) {
                i++;
                d.show('D');
            }   
        }
        boolean show(char a) {
            System.out.println(a);
            return false;
        }
    }
  • 答案:

    A

    B
  • 分析:判断中首先判断起始条件,执行了子类的show(‘A’) 然后,执行 show(‘B’)=false 所以条件不成立,直接结束循环。

第三题:写出程序结果

  • 题目:
    interface A{}
    class B implements A {
        public String test()
        {
            return "yes";
        }
    }
    class Demo {
        static A get() {
            return new B();
        }
        public static void main(String[] args) {
            A a=get();
            System.out.println(a.test());
        }
    }
  • 答案:

  • 分析:test()是B特有方法,所以要进行强制转换 B b=(B) a;通过b.test()来输出为空。

第四题:写出程序结果

  • 题目:
    class Super {
        int i=0;
        public Super(String a) {
            System.out.println("A");
            i=1;    
        }
        public Super() {
            System.out.println("B");
            i+=2;
        }
    }
    class Demo extends Super {
        public Demo(String a) {
            System.out.println("C");
            i=5;                
        }
        public static void main(String[] args) {
            int i=4;
            Super d = new Demo("A");
            System.out.println(d.i);
        }
    }
  • 答案:

    B

    C

    5

    5

  • 分析:系统默认了一个super(),会先执行父类构造函数,打印B C,然后调用调用Demo的构造器打印C 和 5,最后再调用对象的i值5。

第五题:写出程序结果

  • 题目:
    class Fu {
        int num=4;
        void show() {
            System.out.println("showFu");
        }
    }
    class Zi extends Fu {
        int num=5;
        void show() {
            System.out.println("showZi");
        }
    }
    class T {
        public static void main(String[] args) {
            Fu f=new Zi();
            Zi z=new Zi();
            System.out.println(f.num); 
            System.out.println(z.num); 
            f.show();
            z.show(); 
        }
    }
  • 答案:

    4

    5

    showzi

    showzi

  • 分析:多态的特性编译的时候能不能访问看父类,运行时看父类所以打印了4,第二个是本来的引用变量所以打印5;f.show()、z.show()因为父类中有这个方法但是在子类中被重写了。

第六题:写出程序结果

  • 题目:
    interface A {
        void show();
    }
    interface B {
        void add(int a,int b);
    }
    class C implements A,B {
        private int a,b;
        public void add(int a,int b){
            this.a =a;
            this.b = b;
        }
        public void show() {
           System.out.println(a+b); 
        }
    }
    class D {
        public static void main(String[] args) {
            C c=new C();
            c.add(4,2);
            c.show();
        }
    }
  • 答案:

    6

  • 分析:c.add(4,2)将值传入了c指向的对象,c.show()将两个值加起来打印出来了。

第七题:写出程序结果

  • 题目:
    class Super {
        int i=0;    
        public Super(String s) {
            i=1;    
        }
    }
    class Demo extends Super{
        public Demo(String s){
            i=2;            
        }
        public static void main(String[] args){
            Demo d=new Demo("yes");
            System.out.println(d.i);
        }
    }
  • 答案:

    2

  • 分析:系统加了一个默认的super()构造器,然后在调用了Demo(String s)构造器将i的值更改为2。

第八题:写出程序结果

  • 题目:
    class Super{
        public int get()
        {return 4;}
    }
    class Demo15 extends Super{
        public long get(){return 5;}
        public static void main(String[] args){
            Super s=new Demo15();
            System.out.println(s.get());
        }
    }
  • 答案:

  • 分析:返回类型不一样不能完成覆盖,会报错。



版权声明:本文为lds_include原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。