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

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

  • 重载 (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 比较的是值是否相等)。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuZhan7710

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值