【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征

第24题:Java面向对象有哪些特征

📚 回答:

  • 核心特征
    Java面向对象有三大特征:封装继承多态
1. 封装
  • 定义

    封装是将对象的属性和行为隐藏起来,只对外提供访问接口。简单来说,就是"把复杂的事情藏起来,只暴露简单的使用方式"。

  • 实现方式

    • 使用private修饰符隐藏类的属性或方法。
    • 提供public的getter和setter方法来访问这些属性。
  • 好处

    • 提高代码的安全性:外部无法直接修改内部数据。
    • 提升代码的可维护性:修改内部实现不会影响外部调用者。

    💡 代码示例

    以下代码展示了封装的基本实现:

java 复制代码
class Person {
    private String name; // 隐藏属性
    private int age;

    // 提供公共访问接口
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
2. 继承
  • 定义

    继承是指一个类(子类)可以复用另一个类(父类)的功能,并在此基础上扩展新的功能。

  • 实现方式

    使用extends关键字实现继承关系。

  • 好处

    • 减少重复代码:子类可以直接复用父类的属性和方法。
    • 提高代码的扩展性:子类可以在不修改父类的情况下添加新功能。

    💡 代码示例

    以下代码展示了继承的基本实现:

java 复制代码
class Animal {
    void eat() {
        System.out.println("Animal is eating");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("Dog is barking");
    }
}
3. 多态
  • 定义

    多态是指同一个方法在不同对象中表现出不同的行为。它的三个要素是:继承重写父类引用指向子类对象

  • 实现方式

    • 子类重写父类的方法。
    • 使用父类引用指向子类对象,调用方法时执行的是子类的实现。
  • 好处

    • 提高代码的灵活性:同样的方法调用可以根据具体对象表现出不同的行为。
    • 实现"开闭原则":对扩展开放,对修改关闭。

    💡 代码示例

    以下代码展示了多态的基本实现:

java 复制代码
class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("Cat meows");
    }
}

// 测试多态
public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog(); // 父类引用指向子类对象
        Animal animal2 = new Cat();

        animal1.sound(); // 输出 "Dog barks"
        animal2.sound(); // 输出 "Cat meows"
    }
}

💡 面试官视角

  • 面试官可能会问"多态的应用场景是什么?"答:比如工厂模式、策略模式等设计模式都依赖多态实现灵活扩展。
  • 面试官可能会追问"为什么需要重写?"答:重写是为了让子类能够根据自身需求重新定义父类的行为,从而实现多态。

📌 专栏 :大白话说Java面试题 --- 01-Java基础篇

相关推荐
陈随易6 小时前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·后端·程序员
IT_陈寒9 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰9 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
用户83562907805110 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
小满zs10 小时前
Go语言第二章(小无相功)
后端·go
用户83562907805110 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
karry_k10 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
妙码生花10 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
贰先生10 小时前
Xiuno BBS X版 用户封禁系统
后端
karry_k10 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端