Java岗面试题--Java基础(日积月累,每日三题)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

面试题一重载和重写的区别

  • 重载 (Overload) 在一个类中同名的方法如果有不同的参数列表比如参数类型不同、参数个数不同则视为重载。
  • 重写 (Override) 从字面上看重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类的方法但有时子类并不想原封不动的继承父类中的某个方法。所以在方法名参数列表返回类型都相同(子类中方法的返回值可以是父类中方法返回值的子类)的情况下 对方法体进行修改这就是重写。但要注意子类方法的访问修饰权限不能小于父类的。

重载发生在同一个类中若多个方法之间方法名相同、参数列表不同则它们构成重载的关系。 重载方法的返回值以及「访问修饰符无关」即重载的方法不能根据返回类型进行区分。

重写子类返回值要小于等于父类方法抛出的异常要小于等于父类方法「访问修饰符则要大于等于」父类方法。还有若父类方法的访问修饰符为private则子类不能对其重写。

追问一Java 中是否可以重写一个 private 或者 static 方法

不可以。

Java 中 static 方法不能被覆盖因为方法覆盖是基于运行时动态绑定的而 static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关所以概念上不适用。 静态方法是类在加载时就被加载到内存中的方法在整个运行过程中保持不变因而不能重写。

Java 中也不可以覆盖 private 的方法因为 private 修饰的变量和方法只能在当前类中使用 如果是其他的类继承当前类是不能访问到 private 变量或方法的当然也不能覆盖。

静态方法补充静态的方法可以被继承但是不能重写。如果父类和子类中存在同样名称和参数的静态方法那么该子类的方法会把原来继承过来的父类的方法隐藏而不是重写。通俗的讲就是父类的方法和子类的方法是两个没有关系的方法具体调用哪⼀个方法是看是哪个对象的引用这种父子类方法也不在存在多态的性质。

追问二构造器是否可以被重写

在讲继承的时候我们就知道父类的私有属性和构造方法并不能被继承所以 Constructor 也就不能被 Override重写但是可以 Overload重载所以你可以看到⼀个类中有多个构造函数的情况。

每一个类必须有自己的构造函数负责构造自己这部分的构造。子类不会覆盖父类的构造函数相反必须一开始调用父类的构造函数。

面试题二List<? extends T> 和 List <? super T> 之间有什么区别 ?

这两个 List 的声明都是限定通配符的例子List< ? extends T > 可以接受任何继承自 T 的类型的 List而List < ? super T > 可以接受任何 T 的父类构成的 List。

List<? extends T>表示类型的上界为T即参数化的类型可能是T也可能是T的子类。<? extends T>被设计用来读数据的泛型只能读取类型为T的元素。

List<? super T>表示类型的下界为T即参数化的类型可能是T也可能是T的父类型。<? super T>被设计用来写数据的泛型只能写入T或T的子类型不能用来读。

例如 List< ? extends Number > 可以接受「 List <Integer >」 或 「List <Float >」。

即< ? extends T >表示包括 T 在内的任何 T 的子类< ? super T >表示包括 T 在内的任何 T 的父类。

面试题三== 和 equals 的区别

  • ==对比的是栈中得值如果比较的对象是基本数据类型则比较的是数值是否相等如果比较的是引用数据类型则比较的是对象的地址值是否相等。
  • equals 方法用来比较两个对象的内容是否相等。

追问String 中equals方法分析

在这里插入图片描述
在这里插入图片描述
上述代码可以看出String 类中被复写的 equals() 方法其实是比较两个字符串的内容。
注意equals 方法不能用于比较基本数据类型的变量。如果没有对 equals 方法进行重写则比较的是引用类型的变量所指向的对象的地址很多类重写了 equals ⽅法比如 String、Integer 等把它变成了值比较所以⼀般情况下 equals 比较的是值是否相等。
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java