刚入行的 Java 萌新总觉得进阶知识遥不可及,其实很多高频考点就藏在基础的"升级款"里。今天扒 3 个看似简单、面试必问的进阶基础点,带代码带你秒懂!
一、 重载 vs 重写:别再傻傻分不清
很多人会把这俩概念搞混,其实核心区别就一个:重载看参数,重写看父子。
重载(Overload):同一个类里的"多面手"
- 核心规则:方法名相同,参数列表(个数、类型、顺序)不同,与返回值无关。
- 典型场景:构造方法重载、工具方法多参数适配。
java
public class OverloadDemo {
// 无参构造
public OverloadDemo() {
System.out.println("无参构造");
}
// 带参构造(重载)
public OverloadDemo(String msg) {
System.out.println("带参构造:" + msg);
}
// 求和方法1:两个int
public int sum(int a, int b) {
return a + b;
}
// 求和方法2:三个int(重载)
public int sum(int a, int b, int c) {
return a + b + c;
}
public static void main(String[] args) {
OverloadDemo demo1 = new OverloadDemo();
OverloadDemo demo2 = new OverloadDemo("重载测试");
System.out.println(demo2.sum(1,2));
System.out.println(demo2.sum(1,2,3));
}
}
重写(Override):子类对父类的"定制化改造"
- 核心规则:子类方法与父类方法名、参数列表、返回值完全一致,访问权限不能更严格。
- 典型场景:实现多态、定制父类逻辑。
java
// 父类
class Animal {
public void makeSound() {
System.out.println("动物发出叫声");
}
}
// 子类
class Cat extends Animal {
// 重写父类方法
@Override
public void makeSound() {
System.out.println("喵~喵~");
}
}
public class OverrideDemo {
public static void main(String[] args) {
Animal animal = new Cat();
animal.makeSound(); // 输出:喵~喵~ 多态体现
}
}
二、 接口 vs 抽象类:选对能省一半事
这俩都是"规范制定者",但适用场景天差地别,一张表看懂核心区别:
特性 接口(Interface) 抽象类(Abstract Class)
成员变量 只能是 public static final 可以有任意变量
成员方法 JDK8+ 可含默认/静态方法,其余抽象 可含抽象方法和普通方法
继承实现 类可实现多个接口 类只能继承一个抽象类
代码示例:接口做规范,抽象类做基础
java
// 接口:定义"会飞"的规范
interface Flyable {
void fly();
}
// 抽象类:定义"鸟类"的基础属性和方法
abstract class Bird {
protected String name;
public Bird(String name) {
this.name = name;
}
// 抽象方法:子类必须实现
public abstract void eat();
}
// 具体类:麻雀(继承抽象类+实现接口)
class Sparrow extends Bird implements Flyable {
public Sparrow(String name) {
super(name);
}
@Override
public void eat() {
System.out.println(name + "吃虫子");
}
@Override
public void fly() {
System.out.println(name + "低空飞行");
}
}
public class InterfaceAbstractDemo {
public static void main(String[] args) {
Sparrow sparrow = new Sparrow("小麻雀");
sparrow.eat();
sparrow.fly();
}
}
三、 包装类的"坑":== 和 equals 别乱用
Java 为 8 种基本类型提供了包装类(如 Integer 对应 int ),新手最容易踩 == 比较地址的坑。
核心知识点
-
包装类是引用类型, == 比较的是对象地址, equals 比较的是值。
-
缓存池: Integer 在 -128~127 范围内会复用对象,超出范围会新建对象。
java
public class WrapperClassDemo {
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a == b); // true 命中缓存池
System.out.println(c == d); // false 超出缓存范围,新建对象
System.out.println(c.equals(d)); // true 比较值相等
}
}
总结
Java 进阶不是空中楼阁,把这些基础知识点吃透,面试时就能少踩坑!下次再有人问你这些"小儿科",直接甩代码怼回去~