【大白话说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基础篇

相关推荐
码事漫谈3 小时前
我花了一周时间,看AI公司怎么"管"AI,结果越看越后背发凉
后端
大可不必了5 小时前
03 函数定义和调用
开发语言·python
I_belong_to_jesus5 小时前
C++关于分支预测的优化1
开发语言·c++·算法
承渊政道6 小时前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛6 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
GISer_Jing6 小时前
Agent核心内容
后端·ai·langchain
时间的拾荒人6 小时前
Redis 主从复制详解:配置实操 + 原理机制
数据库·redis·面试
budingxiaomoli7 小时前
Spring统一功能处理
java·后端·spring
eggwyw8 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
某鹏8 小时前
网关选型:Go、Java、Graal 谁都不能完胜
后端