湛蓝之海 发表于 2021-12-28 15:38:10

【秋招冲刺】应届生JAVA岗-每日5道高频面试题【Day6】- 基础篇(6)





个人主页: ​​IT学习日记​​版权: 本文由【IT学习日记】原创如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)

[*]




文章大纲

[*]

[*]

[*]​​一:请选出下面关于重写和重载说法正确的选项​​
[*]​​二:请选出下面对应重载说法错误的选项​​
[*]​​三:请选出下面说法正确的选项​​
[*]​​四: 下面那个选项替换到"here"可以让结果输出为:son​​
[*]​​五: 下面代码执行会输出什么结果?​​
[*]​​每日小结​​

[*]



一: 前言



[*]

[*]

[*]大家好,这里是IT学习日记,一个非双一流大学毕业的深漂族,年少曾憧憬大厂,面试过许多家公司,也曾踩过无数坑,深知面试技巧和知识广度与深度对一个应届生乃至工作多年的开发者的重要性。
[*]故特意收集了各个公司、大厂的面试高频题,通过每天打卡的方式,和大家一起记录和学习,希望能够帮助到应届生和开发者们少走弯路,一起冲向大厂!!!

[*]









二: 面试题目



一:请选出下面关于重写和重载说法正确的选项





[*]

[*]

[*]A: 在子类中,如果方法没有被public修饰符修饰,则该方法不能重载(Overload)
[*]B: 重写(Override)只需要满足方法名和参数类型相同即可
[*]C: 重写(Override)要求方法的方法名、参数(包括参数类型和参数顺序)、返回值类型都要相同
[*]D: 有相同的方法名、参数名、参数类型则表示该方法被重写了

[*]





答案: C






  A选项错误: 重载方法与方法的修饰符和返回值类型无关,只跟参数列表(包括参数类型、参数顺序、参数个数)和方法名有关。









  B选项错误: 重写发生在子类与父类或者子类和接口之间,要求如下(简称:两同两小一大原则):

[*]

[*]

[*]两同: 表示重写的参数列表(包括参数类型、参数顺序、参数个数)和方法名需要相同。
[*]两小: 表示方法的返回值类型要小于或等于父类的返回值类型和方法抛出的异常要小于或等于父类方法抛出的异常
[*]一大: 表示重写的方法访问修饰符要大于或等于父类方法的修饰符

[*]

  @Override注解时JDK自带的注解之一,用于重写的方法之上,如果方法不满足重写的条件,则编译不通过,在重写方法时,建议添加该注解,提高代码可读性。









  D选项错误: 说法不正确,重写的方法需要遵循"两同两小一大"原则。



二:请选出下面对应重载说法错误的选项





[*]

[*]

[*]A: 重载方法的方法名必须相同
[*]B: 重载方法的区别是参数列表(参数个数或者参数类型)
[*]C: 重载方法的返回值必须一致
[*]D: 重载方法的实现可以不一样

[*]





答案: C (重载只与方法的参数列表和方法名相关,与方法的返回值类型和方法修饰符类型无关)







三:请选出下面说法正确的选项





[*]

[*]

[*]A: 静态方法不能被重写
[*]B: 静态方法不能被private修饰
[*]C: 私有方法不能被重载
[*]D: 静态方法不能通过对象进行调用

[*]





答案: A






  A选项正确: 静态方法可以被继承,但是不能被重写。因为静态方法是属于类级别的,在加载到JVM时就已经确定了,但重写是表现多态的一种方式,通过父类引用指向子类,然后在运行时再确定具体的类型从而执行不同的逻辑。









  B选项错误: 静态方法和普通方法一样可以被public、protected,默认修饰符、private修饰。









  C选项错误: 重载是表示相同的方法名有不同的参数列表的方法,与返回值类型和访问修饰符无关。




  D选项错误: 静态方法是属于类级别的方法,可以通过类名和实例对象名调用(不推荐使用实例调用静态方法)。







四: 下面那个选项替换到"here"可以让结果输出为:son




public class DemoFather {
    private String name;
    public static void main(String[] args) {
      DemoFather item = new DemoSon();
      // here
    }
}

class DemoSon extends DemoFather{
    private String name;
    public String output(){
      name = "son";
      return name;
    }
}






[*]

[*]

[*]A: System.out.println(item.name);
[*]B: System.out.println(item.output());
[*]C: System.out.println(((DemoSon)item).output());
[*]D: System.out.println((DemoFather)item).output());

[*]





答案: C (使用父类引用指向子类,想调用子类的方法,需要将父类类型强制转换成子类类型再进行调用)









五: 下面代码执行会输出什么结果?




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

public class Son extends Parent {
    public Son() {
      System.out.println("B");
    }

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




答案: A B A (因为Son继承了Parent类,在加载Son类时会先去加载它的父类,所以会先执行父类的构造方法)







每日小结




   不积跬步,无以至千里;不积小流,无以成江海。今天播种努力的种子,总会有一天发芽!



https://blog.51cto.com/u_14020810/4851759
页: [1]
查看完整版本: 【秋招冲刺】应届生JAVA岗-每日5道高频面试题【Day6】- 基础篇(6)