救命!Java 进阶居然还在考这些“小儿科”?

刚入行的 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 进阶不是空中楼阁,把这些基础知识点吃透,面试时就能少踩坑!下次再有人问你这些"小儿科",直接甩代码怼回去~

相关推荐
总是学不会.2 小时前
【JUC编程】多线程学习大纲
java·后端·开发
MediaTea2 小时前
思考与练习(第十章 文件与数据格式化)
java·linux·服务器·前端·javascript
JarvanMo2 小时前
别用英语和你的大语言模型说话
前端
7澄12 小时前
Maven 项目拆分与聚合实战:分层架构下的多模块开发
java·架构·maven·service·dao·pojo·数据库连接
江公望2 小时前
Vue3的 nextTick API 5分钟讲清楚
前端·javascript·vue.js
weixin_446260852 小时前
深入了解 MDN Web Docs:打造更好的互联网
前端
一起养小猫2 小时前
LeetCode100天Day4-盛最多水的容器与两数之和II
java·数据结构·算法·leetcode
ZBritney2 小时前
JAVA中的多线程
java
Codebee2 小时前
# 🔥A2UI封神!元数据驱动的AI交互新范式,技术人必看
前端·架构