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

相关推荐
Flittly4 分钟前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
Poo_Chai4 分钟前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库
IT爱学堂10 分钟前
精讲软件设计师(软考中级)一站式通关课_实战课程_慕课网
后端
瑞码空间11 分钟前
Java 图形界面(GUI)完整知识点手册
java·开发语言·图形界面·swing
战天战地站房顶19 分钟前
在 Windows Docker 中部署 PostgreSQL 17 + pgvector 完整指南
后端
卷无止境34 分钟前
FastAPI Guard 全解析,从概念到工程落地的实战指南
后端·python
卷无止境38 分钟前
FastAPI Users 全面解析:概念、原理与工程实战
后端·python
茶本无香40 分钟前
Java调用Shell脚本执行SQL数据库操作:从入门到实战
java·sql·shell
程序员爱钓鱼44 分钟前
Go switch 详解
后端·面试·go
小努蛋1 小时前
linux编译openresty异常问题,lua_cjson.c:706:5: 错误: ‘for‘ 循环初始化声明只在 C99 或 C++ 模式下允许
开发语言·lua·openresty