Java 面向对象核心知识点(封装 / 继承 / 重写 / 多态)

一、封装

1. 核心思想

"高内聚、低耦合":隐藏类的内部细节,仅对外暴露必要的访问接口,保证数据安全。

2. 实现步骤

  1. 属性私有化 :用private修饰属性,禁止外部直接访问;
  2. 提供公共方法 :通过publicgetter/setter方法间接访问 / 修改属性;
  3. 添加校验逻辑 :在setter方法中校验数据合法性(如年龄范围、非空判断)。

3. 示例(Girl 类)

csharp 复制代码
public class Girl {
    // 私有属性
    private int age;
    
    // setter方法(带校验)
    public void setAge(int age) {
        if (age > 30) {
            this.age = 18; // 非法值强制修正
        } else {
            this.age = age;
        }
    }
    
    // getter方法
    public int getAge() {
        return age;
    }
}

二、继承

1. 核心思想

子类继承父类的非私有属性和方法,实现代码复用,同时可扩展自身特有功能("is-a" 关系)。

2. 语法格式

scala 复制代码
public class 子类名 extends 父类名 {
    // 子类特有属性/方法
}

3. 核心特点

  1. 单继承:Java 中一个子类只能直接继承一个父类,支持多层继承;
  2. 私有成员:子类能继承但不能直接访问父类私有成员,需通过父类公共方法;
  3. 构造器规则 :子类构造器默认调用父类空构造器(super()),无空构造器时需显式调用。

4. 示例(Person/Student)

csharp 复制代码
// 父类:Person
public class Person {
    private String name;
    public void eat() { System.out.println("人吃饭"); }
    // getter/setter省略
}

// 子类:Student
public class Student extends Person {
    private int sno; // 特有属性
    public void study() { System.out.println("学生学习"); } // 特有方法
}

5. 继承的好处

  • 提高代码复用性;
  • 便于功能扩展;
  • 为多态铺垫。

三、方法重写(Override)

1. 核心思想

子类对父类的方法实现不满意时,重新定义方法(方法名、参数列表、返回值需完全一致)。

2. 语法要求

  1. 方法名、参数列表必须与父类完全一致;
  2. 子类方法权限不能比父类更严格(如父类public,子类不能private);
  3. 推荐添加@Override注解(编译期校验重写规则)。

3. 示例(Animal/Dog)

csharp 复制代码
// 父类
public class Animal {
    public void shout() {
        System.out.println("动物发出声音");
    }
}

// 子类(重写方法)
public class Dog extends Animal {
    @Override
    public void shout() {
        System.out.println("狗-汪汪叫"); // 子类特有实现
    }
}

4. 重写 vs 重载

表格

特性 方法重写(Override) 方法重载(Overload)
发生位置 子类与父类之间 同一个类中
参数列表 必须完全一致 必须不同
返回值 需兼容(通常一致) 无要求
修饰符 权限不能更严格 无要求

四、多态

1. 核心思想

"同一种行为,不同对象表现出不同状态",仅针对方法,与属性无关。

2. 实现前提

  1. 存在继承 / 实现关系;
  2. 子类重写父类方法;
  3. 父类引用指向子类对象(父类 变量 = new 子类())。

3. 核心示例(Animal/Cat/Dog/Girl)

java

运行

typescript 复制代码
// 1. 父类
public class Animal {
    public void shout() { System.out.println("动物喊叫"); }
}

// 2. 子类(重写方法)
public class Cat extends Animal {
    @Override
    public void shout() { System.out.println("猫-喵喵叫"); }
}
public class Dog extends Animal {
    @Override
    public void shout() { System.out.println("狗-汪汪叫"); }
}

// 3. 多态调用(Girl类)
public class Girl {
    public void play(Animal animal) {
        animal.shout(); // 执行子类重写后的方法
    }
}

// 4. 测试类
public class Test {
    public static void main(String[] args) {
        Girl g = new Girl();
        // 父类引用指向子类对象
        Animal cat = new Cat();
        Animal dog = new Dog();
        
        // 同一方法,不同结果(多态核心)
        g.play(cat); // 输出:猫-喵喵叫
        g.play(dog); // 输出:狗-汪汪叫
    }
}

4. 多态的好处

  • 高扩展性:新增子类(如 Bird)无需修改原有代码,直接传入即可;
  • 低耦合:调用方依赖抽象父类,而非具体子类;
  • 代码简洁:避免大量重载方法(如 play (Cat)/play (Dog))。

五、核心知识点总结

  1. 封装:通过 "私有属性 + 公共方法" 保护数据安全,是面向对象的基础;
  2. 继承:实现代码复用,是重写和多态的前提;
  3. 重写:子类定制父类方法,是多态的核心实现手段;
  4. 多态:父类引用指向子类对象,让代码更灵活、易扩展,体现 "开闭原则"。
相关推荐
陈随易8 小时前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·后端·程序员
IT_陈寒11 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰11 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
用户83562907805112 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
小满zs12 小时前
Go语言第二章(小无相功)
后端·go
用户83562907805112 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
karry_k12 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
妙码生花12 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
贰先生12 小时前
Xiuno BBS X版 用户封禁系统
后端
karry_k12 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端