Java基础面试题-2
6、重载和重写的区别?
(1)重载:编译时多态,同一个类中同名的方法具有不同的参数列表,不能根据返回类型进行区分。【函数调用时不能指定类型信息,编译器不知道你要调用哪个函数】
(2)重写(覆盖):运行时多态,子类与父类之间,子类重写父类方法具有相同的返回类型,更好的访问权限。
7、Java修饰符作用范围
同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 | |
---|---|---|---|---|
private | ✔ | |||
default | ✔ | ✔ | ||
protected | ✔ | ✔ | ✔ | |
public | ✔ | ✔ | ✔ | ✔ |
8、Java中是否可以重写一个private或者static方法?
静态⽅法:静态的⽅法可以被继承,但是不能重写。如果⽗类和⼦类中存在同样名称和参数的静态⽅法,那么该⼦类的⽅法会把原来继承过来的⽗类的⽅法隐藏,⽽不是重写。通俗的讲就是⽗类的⽅法和⼦类的方法是两个没有关系的⽅法,具体调⽤哪⼀个⽅法是看是哪个对象的引⽤;这种⽗⼦类⽅法也不在存在多态的性质。
Java 中 static ⽅法不能被覆盖,因为⽅法覆盖是基于运⾏时动态绑定的,⽽ static ⽅法是编译时静态绑定的static ⽅法跟类的任何实例都不相关,所以概念上不适⽤。
Java 中也不可以覆盖 private 的⽅法,因为 private 修饰的变量和⽅法只能在当前类中使⽤, 如果是其他的类继承当前类是不能访问到 private 变量或⽅法的,当然也不能覆盖。
9、构造方法是否可以被重写?
父类的似有属性和构造方法不能被继承,所以构造方法根本就不存在被重写的可能,但可以被重载。
10、构造方法有哪些特性?
(1)构造方法名与类名相同;
(2)没有返回值,但不能用void声明构造函数;
(3)类的对象构造方法自动执行,无需调用。
11、Java中定义空构造的作用?
Java程序在执行子类的构造方法之前,如果没有使用super()来调用父类特定的构造方法,则会调用父类的空构造方法。
因此,如果⽗类中只定义了有参数的构造⽅法,⽽在⼦类的构造⽅法中⼜没有⽤ super() 来调⽤⽗类中特定的构造
⽅法,则编译时将发⽣错误,因为 Java 程序在⽗类中找不到没有参数的构造⽅法可供执⾏。解决办法是:在⽗类
⾥加上⼀个不做事且没有参数的构造⽅法。