第1天:面向对象与基础语法

要点

  • 面向对象三大特性是什么?分别解释。
  • == 和 equals() 的区别?
  • 方法重载和重写的区别?
  • String、StringBuffer、StringBuilder 的区别?
  • 接口和抽象类的区别?

目录

    • [1. 面向对象三大特性是什么?分别解释。](#1. 面向对象三大特性是什么?分别解释。)
    • [2. == 和 equals() 的区别?](#2. == 和 equals() 的区别?)
    • [3. 方法重载和重写的区别?](#3. 方法重载和重写的区别?)
    • [4. String、StringBuffer、StringBuilder 的区别?](#4. String、StringBuffer、StringBuilder 的区别?)
    • [5. 接口和抽象类的区别?](#5. 接口和抽象类的区别?)

1. 面向对象三大特性是什么?分别解释。

面向对象三大特性是封装、继承、多态

  • 封装:将对象的属性(成员变量)和行为(方法)捆绑在一起,并对外隐藏内部实现细节,仅通过公共接口暴露。例如用 private 修饰字段,提供 getter/setter 控制访问,提高安全性和可维护性。

  • 继承:通过 extends 关键字让子类复用父类的属性和方法,并可以扩展或重写。继承体现了"is-a"关系,支持代码复用和层次分类。

  • 多态:同一操作作用于不同对象,可以有不同的解释和执行结果。在Java中体现为重载(编译时多态)和重写(运行时多态),核心是父类引用指向子类对象,调用重写的方法时动态绑定到实际对象类型。


2. == 和 equals() 的区别?

  • == 是运算符,用于比较基本数据类型时比较值;用于引用类型时比较内存地址(即是否指向同一个对象)。

  • equals() 是 Object 类的方法,默认行为与 == 一致(比较地址)。但通常被重写(如 String、Integer 等)来比较对象的内容。例如 String 的 equals() 比较字符序列是否相同。

    在使用 equals() 前需确保对象不为 null,否则可能抛出 NullPointerException。


3. 方法重载和重写的区别?

重载(Overloading):在同一个类中,方法名相同,但参数列表(类型、个数、顺序)不同,与返回值、访问修饰符无关。它体现了编译时多态。

重写(Overriding):子类对父类允许访问的方法重新实现,方法签名(名称+参数列表)必须相同,返回值类型可以是原类型的子类型(协变返回),访问修饰符不能更严格,不能抛出更宽泛的异常。它体现了运行时多态。

Java 复制代码
// 重载
class Calc {
    int add(int a, int b) { return a+b; }
    double add(double a, double b) { return a+b; }
}

// 重写
class Parent {
    void show() { System.out.println("Parent"); }
}
class Child extends Parent {
    @Override
    void show() { System.out.println("Child"); }
}

4. String、StringBuffer、StringBuilder 的区别?

  • String:不可变字符序列,每次修改都会产生新对象,线程安全(因为不可变),适用于少量字符串操作或常量。

  • StringBuffer:可变字符序列,线程安全(方法用 synchronized 修饰),效率较低,适用于多线程环境下的字符串频繁修改。

  • StringBuilder:可变字符序列,线程不安全,但性能最高,适用于单线程环境(如方法内部局部变量)。

    性能对比:StringBuilder > StringBuffer > String(在大量拼接时)。


5. 接口和抽象类的区别?

  • 设计层面:抽象类是对类的抽象(模板设计),体现"is-a"关系;接口是对行为的抽象(规范),体现"like-a"关系。

  • 语法层面:

    • 抽象类用 abstract class 定义,接口用 interface 定义。

    • 抽象类可以包含构造器、成员变量(各种访问权限)、具体方法和抽象方法;接口中成员变量默认 public static final,方法默认 public abstract(Java 8 后可以有 default 和 static 方法,Java 9 允许私有方法)。

    • 一个类只能继承一个抽象类,但可以实现多个接口。

    • 抽象类用于定义子类的公共特征,接口用于定义一组必须实现的方法(契约)。

      使用场景:当需要定义一组子类的共同状态和通用方法时用抽象类;当需要定义一组行为(可混合)时用接口。

相关推荐
TDengine (老段)1 分钟前
TDengine 免费版说明
java·大数据·数据库·物联网·时序数据库·tdengine
乐观勇敢坚强的老彭3 分钟前
信奥C++一维数组笔记
开发语言·c++·笔记
码上有光5 分钟前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
这就是佬们吗11 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
asdzx6723 分钟前
Python PDF 拆分实战指南:单页拆分与按需页码范围拆分
开发语言·python·pdf
孬甭_33 分钟前
C++ vector
开发语言·c++
学计算机的计算基1 小时前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana21 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
AOwhisky1 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
万亿少女的梦1681 小时前
基于Spring Boot、Java与MySQL的网络订餐系统设计与实现
java·spring boot·mysql·系统设计·网络订餐