Java面试题
继承
- 访问权限
- 接口与抽象类
- super
- 重写与重载
抽象类
抽象类 和抽象方法 需要用abstract 关键字声明。 抽象类一般包含抽象方法。
抽象类和一般类的区别在于抽象类不能被实例化。
1 | public abstract class AbstractClassExample { |
使用抽象类:
- 需要多个相关的类中共享代码。
- 需要能控制继承来的成员的访问权限,并不都是public。
- 需要继承非静态和非常量字段。
接口
接口是完全抽象的类,在 Java8之前, 就是不能有任何的方法实现
在Java 8开始,接口可以拥有默认的方法实现,因为不支持默认方法的接口维护成本太高了。
接口的成员(字段+方法)都是默认public,并且不允许定义为Private 或 protected。
接口的字段默认都是 static 和 final 的。
1 | public interface InterfaceExample { |
使用接口
- 需要让不相关的类都实现一个方法,例如不相关的类都实现Comparable接口中的compareTo();
- 想要确定特定数据类型的行为,但是不关心谁实现这个行为。
- 需要使用多重继承。
抽象类与接口区别
使用上来说,一个类可以实现多个接口,但是不能继承多个抽象类。
接口的字段 只能是static 和final类型,抽象类没有限制。
接口成员只能是public,抽象类成员可以有多种访问权限。
选择:
很多时候,接口优于抽象类,因为接口没有抽象类严格的类层级结构要求,可以灵活为一个类添加行为。 并且从Java8开始,接口也可以有默认的方法实现,使得修改接口的成本很低。
重载和重写
重写(override)
发生在继承关系中,子类实现父类方法声明完全相同的方法。
为了满足里氏替换原则有两个限制:
- 子类方法的访问权限必须大于等于父类方法。
- 子类方法的返回类型必须是父类返回类型或者其子类型。
使用@Override注解,可以让编译器帮忙检查是否满足以上两个条件。
重载(overload)
存在于同一个类中, 一个方法与已经存在的方法名称上相同,但是参数类型、个数和顺序至少有一个不同。
但是 返回值不同,其他都相同不算重载。
- Post title:Java面试题
- Post author:郭旭升
- Create time:2022-11-13 16:14:44
- Post link:2022/11/13/Java/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments