zoukankan      html  css  js  c++  java
  • Java真实笔试题一

    PS:昨天去笔试后,发现自己对于JavaSE的基础部分还是有些薄弱的地方,特将昨天自己不是太清楚的地方记录下来,巩固基础。

    子类继承父类静态方法的问题

    public class Study {
        public static void main(String[] args) {
            Super sup = new SubClass();
            sup.say();
            sup.a();
    
            SubClass sub = new SubClass();
            sub.say();
            sub.a();
        }
    }
    
    class Super {
        public static void say() {
            System.out.println("I am super");
        }
    
        public void a() {
            System.out.println("super a");
        }
    }
    
    class SubClass extends Super{
        public static void say() {
            System.out.println("I am sub");
        }
    
        @Override
        public void a() {
            System.out.println("sub a");
        }
    }

      题目就是问上面的输出结果,这里主要考察的就是子类对于父类静态方法是如何继承的。首先子类能够继承父类的静态方法,但是子类不能够重写父类的静态方法,这就意味着如果如果子类有一个和父类同名且方法签名相同的方法,那么此时子类会隐藏父类的该方法,我们知道多态的机制靠的就是子类重写父类的方法,然后用父类的引用指向子类的对象,用父类的引用调用子类的方法。此时,该静态方法只是被隐藏了,没有被重写,那么在该方法上就没有实现多态。(上面的代码是在IDEA里编写的,在编写的过程也能发现子类对父类的静态方法没有重写,没有提示加@Override注解)

      所以上面的输出是:

    I am super
    sub a
    I am sub
    sub 

    Java中类初始化的问题

     问:下面代码的输出结果?

    package com.yunche;
    
    /**
     * @ClassName: Study
     * @Description:
     * @author: yunche
     * @date: 2018/12/05
     */
    public class Study {
        public static void main(String[] args) {
            SubClass subClass = new SubClass();
        }
    }
    
    class Super {
        static{
            System.out.println("super:clinit()");
        }
    
       Super() {
           System.out.println("super:init()");
       }
    }
    
    class SubClass extends Super{
        static{
            System.out.println("SubClass:clinit()");
        }
    
        SubClass() {
            System.out.println("SubClass:init()");
        }
    }

      此题考查类的初始化顺序,先将父类的 clinit() 方法执行完,再执行子类的 clinit()方法,然后执行父类的 init() 方法,最后执行子类的 init() 方法。所以结果为:

    super:clinit()
    SubClass:clinit()
    super:init()
    SubClass:init()
  • 相关阅读:
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    《SeleniumBasic 3.141.0.0
    MQ详解及四大MQ对比
    Locust的使用
    pytest测试框进阶(二)
    pytest测试框进阶(一)
    pytest测试框架简介(二)
    pytest测试框架简介(一)
    弱网测试简介
  • 原文地址:https://www.cnblogs.com/yunche/p/10069205.html
Copyright © 2011-2022 走看看